【大博哥来解题:】
本题思路:
1、先整体逆置
2、从头开始每个单词逆置,需要注意,最后一个单词结尾不是空格。C/C++就是\0.Java通过长度来判断。
3、C/C++注意,不要逆置了\0 . Java 注意通过长度判断句子结束
4、以下代码分别是:C 、C++、Java实现
代码实现:
C 代码:
#include<stdio.h>
#include<string.h>
void Reverse(char *start,char *end)
{
while(start < end)
{
char tmp = *start;
*start = *end;
*end = tmp;
start++;
end--;
}
}
int main()
{
char input[100];
gets(input);
//1.整体逆置
Reverse(input,input+strlen(input)-1);
char *start = input;
char *end = input;
while(*start != '\0')
{
while(*end != ' ' && *end != '\0')
{
end++;
}
if(*end == ' ')
{
Reverse(start, end-1);
end++;
start = end;
}
else
{
Reverse(start, end-1);
start = end;
}
}
printf("%s\n",input);
return 0;
}C++代码:
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
string s;
getline(cin,s);
//1、进行整体的逆置 -》gnijieb ekil I
reverse(s.begin(),s.end());
auto start = s.begin();
while(start != s.end()) {
auto end = start;
while(end != s.end() && *end != ' ') {
end++;
}
reverse(start,end);
if(end != s.end()) {
start = end+1;
}else{
start = end;
}
}
cout<<s<<endl;
}Java代码:
import java.util.*;
public class Main{
public static void reverse(char[] array,int start,int end) {
while(start < end) {
char tmp = array[start];
array[start] = array[end];
array[end] = tmp;
start++;
end--;
}
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String s = scan.nextLine();
char[] ch = s.toCharArray();
int len = ch.length;
//1、整体进行了逆置
reverse(ch,0,len-1);
int i = 0;//遍历ch数组
while( i < len ) {
int j = i;
while(j < len && ch[j] != ' ') {
j++;
}
if(j < len) {
reverse(ch,i,j-1);
i = j+1;
}else{
reverse(ch,i,j-1);
i = j;
}
}
String str = new String(ch);
System.out.println(str);
}
}
京公网安备 11010502036488号