句子单词的逆转

       这里我们谈论的是句子单词的逆转。比如you are welcome!翻转成weclome! are you

       对于这道题,解题思路可以有很多种,可以以单词为单位,然后交换,比如用you 和weclome!交换,利用两个指针,不断的向后和向前搜索。

       但是由于单词的长度的不一致性,即不对称,那么显然需要额外开辟空间,临时保存单词。而且这种方式特别容易出错,所以一般不建议这种方式进行处理。

       我们这里介绍一种方法:

       如果我们说单词反转,比如word反转成drow,大家是不是非常熟悉呢?这样通过两个指针,不断搜索就可以达到目的了。

       那我们深入思考一下,句子是不是也可以看成一个单词呢?you are welcome! 反转成!emoclew era uoy

       聪明的你肯定看出了端倪,经过两次反转不就得到了我们需要的结果吗?YES ,YOU ARE RIGHT!我们再把单词反转一遍,结果就出来了。

       下面附上代码:仅供参考!

 1 //整个语句反转,语句可以是单词或者句子.这和链表的逆转是不是非常相似呢?
 2 char* reverse(char *sourceStr,char *last){
 3     assert(sourceStr);
 4     char* des=sourceStr;
 5     while(des<last){
 6         char temp=*des;
 7         *des=*last;
 8         *last=temp;
 9         des++,last--;
10     }
11     return sourceStr;
12 }
 1 char* reverseStence(char *sourceStr){
 2     char* pend=sourceStr;
 3     while(*pend!='')
 4         pend++;
 5     pend--;//搜索到最后一个字母,使pend指针指向最后一个字符
 6     reverse(sourceStr,pend);   //反转句子
 7     char *n=sourceStr;
 8     while(*n!=''){
 9         while(*n==' ')//忽略空格键
10             n++;
11         char *m=n;
12         //反转用‘ ’分割
13         while(*n!=' '&&*n!='')
14             n++;
15         n--;//n指向单词的最后一个字符
16         reverse(m,n);//再对每个单词进行翻转
17         n++;
18     }
19     return sourceStr;
20 }

     版权所有,欢迎转载,但是转载请注明出处:潇一

原文地址:https://www.cnblogs.com/xiaoyi115/p/3621017.html