- /*测试数据:Shen zhen is a beautiful city!*/
- /*运行结果:city! beautiful a is zhen Shen*/
- #include<stdio.h>
- #define SIZE 1000
- void reverse(char *low,char *high)/*接受两个指针,将指针中间的内容倒置*/
- {
- while (low < high){
- *low = *low^*high;
- *high = *low^*high;
- *low = *low^*high;
- ++low;
- --high;
- }
- }
- void reverseWord(char *str)
- {
- char *c = str, *e = str, *low, *high;
- while (*e != 0){
- ++e;
- }
- reverse(c,--e);/*将整个字符串倒置*/
- while (*c!=0){
- while (*c != 0 && *c == 32){
- ++c;
- }
- low = c;/*指向单词首部的指针*/
- while (*c != 0 && *c != 32){
- ++c;
- }
- high = c - 1;/*指向单词尾部的指针*/
- if (low < high){
- reverse(low,high);/*将单词倒置*/
- }
- }
- puts(str);
- }
- int main()
- {
- char str[SIZE];
- printf("Please enter a string :\n");
- gets(str);
- reverseWord(str);
- return 0;
- }
- /*测试数据:Shen zhen is a beautiful city!*/
- /*运行结果:Shen%20zhen%20is%20a%20beautiful%20city!*/
- #include<stdio.h>
- #define SIZE 1000
- void wordReplace(char *str)
- {
- char *p = str, *e=str,*q,*r;
- char rp[] = "%20";
- r = rp;
- while (*e != 0){
- ++e;
- }
- q=e;
- while (*p){
- while (*p == 32){
- while (q != p){
- *(q + 2) = *q;/*之所以是2,是因为%20有三个字符,由于当前字符本身为空格,所以只需要往后面移动两位即可*/
- --q;
- }
- while (*r != 0){/*将%20字符串复制到空白区域*/
- *p = *r;
- ++p;
- ++r;
- }
- --p;/*为了能用下面的++p*,先将p往前移动一位/
- r = rp;/*初始化*/
- e += 2;/*字符串长度增加2*/
- q = e;/*初始化*/
- }
- ++p;
- }
- puts(str);/*输出改动后的字符串*/
- }
- int main()
- {
- char str[SIZE];
- printf("Please enter a string :\n");
- gets(str);
- //wordCount(str);
- //wordReplace(str);
- reverseWord(str);
- return 0;
- }