c语言字符串翻转系列
2013-10-25
最近碰到一道笔试题,是关于字符串翻转的。题目是:将一段英文翻转,但保留单词拼写,如给定字符串str="I am a student",返回为"student a am I"。(为简单代码,设给定字符串由' '和字母组成)。
对于这个题目我的思路是,先不管单词拼写,将str完全翻转得到str="tneduts a ma I",然后再对str中每个单词逐个翻转。代码实现如下
1 #include<stdio.h> 2 #include<math.h> 3 #include<string.h> 4 char *revstr(char *str)//翻转字符串 5 { 6 if(str==NULL) return str; 7 char *start=str; 8 char *left=str; 9 char temp; 10 11 while(*str++);//find ending of str 12 str-=2; 13 while(left<str){ 14 temp=*left; 15 *left++=*str; 16 *str--=temp; 17 } 18 str=start; 19 return(start); 20 }
1 char *revword(char *str)//翻转字符串中的单词 2 { 3 char *start=str,*end=str,*p=str,temp; 4 if(str==NULL) return str; 5 6 while(1){//注意循环跳出条件 7 while(*start++==' ');//find word's first letter 8 start--; 9 10 p=start; 11 while(*p!=' '){//find first ' ' or '\0' after a word; 12 p++; 13 if(*p=='\0') break; 14 } 15 end=p-1;//find word's last letter 16 while(start<end){ 17 temp=*start,*start++=*end,*end--=temp; 18 } 19 if(*p=='\0') break; 20 start=p+1; 21 } 22 return str; 23 } 24 int main() 25 { 26 char str[100]; 27 while(gets(str)!=NULL) 28 { 29 puts(str); 30 revstr(str); 31 puts(str); 32 revword(str); 33 puts(str); 34 35 } 36 }