将字符串中的每个单词顺序进行颠倒,单词还是原来的单词,字母顺序不发生变化,将字符串中的空格用 代替

[cpp]   view plain copy 在CODE上查看代码片 派生到我的代码片
  1. /*测试数据:Shen zhen is a beautiful city!*/  
  2. /*运行结果:city! beautiful a is zhen Shen*/  
  3. #include<stdio.h>  
  4. #define SIZE 1000  
  5.   
  6. void reverse(char *low,char *high)/*接受两个指针,将指针中间的内容倒置*/  
  7. {  
  8.     while (low < high){  
  9.         *low = *low^*high;  
  10.         *high = *low^*high;  
  11.         *low = *low^*high;  
  12.         ++low;  
  13.         --high;  
  14.     }  
  15. }  
  16.   
  17. void reverseWord(char *str)  
  18. {  
  19.     char *c = str, *e = str, *low, *high;  
  20.     while (*e != 0){  
  21.         ++e;  
  22.     }  
  23.     reverse(c,--e);/*将整个字符串倒置*/  
  24.     while (*c!=0){  
  25.         while (*c != 0 && *c == 32){  
  26.             ++c;  
  27.         }  
  28.         low = c;/*指向单词首部的指针*/  
  29.         while (*c != 0 && *c != 32){  
  30.             ++c;  
  31.         }  
  32.         high = c - 1;/*指向单词尾部的指针*/  
  33.         if (low < high){  
  34.             reverse(low,high);/*将单词倒置*/  
  35.         }  
  36.     }  
  37.     puts(str);  
  38. }  
  39.   
  40. int main()  
  41. {  
  42.     char str[SIZE];  
  43.     printf("Please enter a string :\n");  
  44.     gets(str);  
  45.     reverseWord(str);  
  46.     return 0;  
  47. }  
[cpp]   view plain copy 在CODE上查看代码片 派生到我的代码片
  1. /*测试数据:Shen zhen is a beautiful city!*/  
  2. /*运行结果:Shen%20zhen%20is%20a%20beautiful%20city!*/  
  3. #include<stdio.h>  
  4. #define SIZE 1000  
  5.   
  6. void wordReplace(char *str)  
  7. {  
  8.     char *p = str, *e=str,*q,*r;  
  9.     char rp[] = "%20";  
  10.     r = rp;  
  11.     while (*e != 0){  
  12.         ++e;  
  13.     }  
  14.     q=e;  
  15.     while (*p){  
  16.         while (*p == 32){  
  17.             while (q != p){  
  18.                 *(q + 2) = *q;/*之所以是2,是因为%20有三个字符,由于当前字符本身为空格,所以只需要往后面移动两位即可*/  
  19.                 --q;  
  20.             }  
  21.             while (*r != 0){/*将%20字符串复制到空白区域*/  
  22.                 *p = *r;  
  23.                 ++p;  
  24.                 ++r;  
  25.             }  
  26.             --p;/*为了能用下面的++p*,先将p往前移动一位/ 
  27.             r = rp;/*初始化*/  
  28.             e += 2;/*字符串长度增加2*/  
  29.             q = e;/*初始化*/  
  30.         }  
  31.         ++p;  
  32.     }  
  33.     puts(str);/*输出改动后的字符串*/  
  34. }  
  35.   
  36. int main()  
  37. {  
  38.     char str[SIZE];  
  39.     printf("Please enter a string :\n");  
  40.     gets(str);  
  41.     //wordCount(str);  
  42.     //wordReplace(str);  
  43.     reverseWord(str);  
  44.     return 0;  
  45. }  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值