翻转句子中单词的顺序

来源:互联网 发布:php radio 取值 编辑:程序博客网 时间:2024/06/05 07:40
题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。比如输入"I love you.",输出"you. love I"。

解题思路:
我们可以先翻转整个字符串,然后再翻转字符串中的每个单词。比如"I love you."翻转整个字符串后得到".uoy evol I",再翻转字符串中的每一个单词得到"you. love I"。当然也可以先翻转字符串中的每个单词,翻转整个字符串。注意多个空格连续时还是当成一个分隔符,比如"  I love you.  "翻转句子后变成"  you. love I  "。

算法实现:

[cpp] view plaincopy
  1. void reverseSentence(char str[])  
  2. {  
  3.     if(str==NULL||str[0]=='\0'return;//字符串为空或为空串时,直接返回  
  4.     reverseStr(str);  
  5.     int n=0;  
  6.     int start=0;  
  7.     char temp;  
  8.     while(str[n]!='\0')  
  9.     {  
  10.         while(str[n]==' '//当多个' '连着时,还是将它们看成一个分割符  
  11.         {  
  12.             n++;  
  13.         }  
  14.         start=n;  
  15.         while(str[n]!=' '&&str[n]!='\0')  
  16.         {  
  17.              n++;  
  18.         }  
  19.         temp=str[n];//保存翻转单词的后一个字符,在这里是' '字符或'\0'结束符  
  20.         str[n]='\0';  
  21.         reverseStr(str+start);  
  22.         str[n]=temp;//恢复翻转单词的后一个字符  
  23.         if(str[n]=='\0'break;//跳出循环  
  24.         n++;  
  25.     }  
  26. }  


reverseStr()方法我的一篇博文有它的具体实现:字符串翻转


PS:这里翻转单词时,可以通过在翻转字符串的基础上,另外再传递一个结束指针实现,很多人都是这样实现的。但是我前面已经写了一个翻转字符串的方法,不想再改这个方法,让它接受两个参数的传递,所以我用了一个辅助字符,当要翻转单词时,我保存翻转单词的后一个字符,然后令翻转单词的后一个字符为'\0',翻转完该单词后就恢复翻转单词的后一个字符。

0 0
原创粉丝点击