将字符串反转,但单词不倒置。

Right here waiting for you!    ->    you! for waiting here Right

代码1:

 1 //将字符串反转,但单词不倒置。
 2 
 3 #include<stdio.h>
 4 #include<string.h>
 5 
 6 void reverse(char *s)
 7 {
 8     char data[255][255];//将s中的空格和非空格子串进行存储
 9     int row = 0,column = 0;
10     int i,j,k;
11 
12     for(i=0;s[i];)
13     {
14         data[row][column] = s[i];
15         column++;
16 
17         //找到了空格子串的开头
18         if(s[i] == ' ')
19         {
20             i++;
21             if(s[i] == ' ')
22             {
23                 do
24                 {
25                     data[row][column++] = s[i++];
26                 }while(s[i] == ' ');
27 
28                 data[row++][column] = '\0';
29                 column = 0;
30             }
31             else
32             {
33                 data[row++][column] = '\0';
34                 column = 0;
35             }
36         }
37 
38         //找到了非空格子串的开头
39         else if(s[i] != ' ')
40         {
41             i++;
42             if(s[i] != ' ')
43             {
44                 do
45                 {
46                     data[row][column++] = s[i++];
47                 }while(s[i] != ' ' && s[i]);//注意非空格字符还包括字符串结束符。
48 
49                 data[row++][column] = '\0';
50                 column = 0;
51             }
52             else
53             {
54                 data[row++][column] = '\0';
55                 column = 0;
56             }
57         }
58     }
59 
60     //将data[][]里面的子串存放于s中。
61     k = 0;
62     for(i=row-1;i>=0;i--)
63     {
64         for(j=0;data[i][j]!='\0';j++)
65         {
66             s[k++] = data[i][j];
67         }
68     }
69     s[k] = '\0';
70 }
71 
72 int main()
73 {
74     char s[255];
75     gets(s);
76     reverse(s);
77     puts(s);
78 }

代码2:

 1 //将字符串反转,但单词不倒置。Right here waiting for you! -> you! for waiting here Right
 2 #define _CRT_SECURE_NO_WARNINGS
 3 #include <stdio.h>
 4 #include <string.h>
 5 
 6 int main() 
 7 {
 8     char str[255];
 9     char result[255];
10     int length;
11     int i,j,k = 0;
12     int wordLen = 0;
13 
14     gets(str);
15     length = strlen(str);
16 
17     for (i = length-1; i >= 0; i--)
18     {
19         if (str[i] == ' ')
20         {
21             if (wordLen != 0)
22             {
23                 for (j = i + 1; j <= i + wordLen; j++)
24                 {
25                     result[k++] = str[j];
26                 }
27             }
28             result[k++] = ' ';
29             wordLen = 0;
30         }
31         else
32         {
33             wordLen++;
34         }
35     }
36     if (wordLen != 0)
37     {
38         for (j = 0; j < wordLen; j++)
39         {
40             result[k++] = str[j];
41         }
42     }
43     result[k] = '\0';
44     printf("%s", result);
45     return 0;
46 }

 

posted @ 2014-07-11 16:51  Andy Cheung  阅读(480)  评论(0编辑  收藏  举报