算法实现:
void reverseSentence(char str[]) { if(str==NULL||str[0]=='\0') return;//字符串为空或为空串时,直接返回 reverseStr(str); int n=0; int start=0; char temp; while(str[n]!='\0') { while(str[n]==' ') //当多个' '连着时,还是将它们看成一个分割符 { n++; } start=n; while(str[n]!=' '&&str[n]!='\0') { n++; } temp=str[n];//保存翻转单词的后一个字符,在这里是' '字符或'\0'结束符 str[n]='\0'; reverseStr(str+start); str[n]=temp;//恢复翻转单词的后一个字符 if(str[n]=='\0') break;//跳出循环 n++; } }
reverseStr()方法我的一篇博文有它的具体实现:字符串翻转
PS:这里翻转单词时,可以通过在翻转字符串的基础上,另外再传递一个结束指针实现,很多人都是这样实现的。但是我前面已经写了一个翻转字符串的方法,不想再改这个方法,让它接受两个参数的传递,所以我用了一个辅助字符,当要翻转单词时,我保存翻转单词的后一个字符,然后令翻转单词的后一个字符为‘\0‘,翻转完该单词后就恢复翻转单词的后一个字符。
原文地址:http://blog.csdn.net/lavor_zl/article/details/42742413