问题
单词翻转。输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变,句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。例如,输入“I am a student.”,则输出“student. a am I”。
解题思路:
先对整体进行翻转,再以空格或者’\0’为界,将语句划分为N个独立的单词,对每个单词进行独立的翻转。
先对整体翻转过后得句子:
“I am a student.”--->".tneduts a ma I"
然后再对单个的单词进行翻转,就可以得到
.tneduts ---> student.
a ---> a
ma ---> am
I ---> I
整个句子就翻转过来了。具体代码如下所示:
#include<iostream>
#include<string.h>
using namespace std;
void ReverseWord(char *s, int from, int to){
if(NULL == s || from<0 || to>strlen(s) || from>=to)
return ;
while(from < to){
char temp = s[from];
s[from++] = s[to];
s[to--] = temp;
}
}
void ReverseSentence(char *s){
int from = 0;
int to = 0;
ReverseWord(s, 0, strlen(s)-1);
for(to=0; to<strlen(s); to++){
if(s[to] == ' ' || to == strlen(s)-1){
ReverseWord(s, from, to-1);
from = to+1;
}
}
}
int main(){
char s[16] = "I am a student.";
cout << s << endl;
ReverseSentence(s);
cout << s << endl;
return 0;
}
代码经过测试,可以直接运行。