题目描述:翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。
为简单起见,标点符号和普通字母一样处理。如:"I am a student."翻转成"student. a am I"。
在上述题目中我看到网上好多答案在最后一个单词是没有经过翻转的,假如句子翻转后最后
一个单词不是一个字母(也就是原句中的第一个单词不是一个字母),那么就会出现最后一个单词没有翻转的 情况.所以在最后还要进行一次单词翻转.
如: “My name is fgreen”翻转后应该是”fgreen is name My”
代码如下:
// ConsoleApplication1.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include "iostream" using namespace std; void ReverseWord(char *str,int start,int end) { char tem=' '; while (start<end) { tem=str[start]; str[start]=str[end]; str[end]=tem; ++start; --end; } } void ReverseSentence(char *str) { if(str==NULL||*str=='\0') return; ReverseWord(str,0,strlen(str)-1); int i=0; int t=i; while (true) { if(str[i]==' ') { ReverseWord(str,t,i-1); t=i+1; } ++i; if(str[i]=='\0')//最后一个单词也要翻转; { ReverseWord(str,t,i-1); break; } } } int main(int argc, char* argv[]) { char str[]="My name is fgreen"; ReverseSentence(str); cout<<str<<endl; getchar(); return 0; }