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

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 }

 

你可能感兴趣的:(字符串)