/************************************************************************/ /* 面4:一句话的单词进行倒置,标点符号不倒换,比如一句话"i
come from nanjing"倒换后变成"nanjing from
come i".
*/ /************************************************************************/ #include<stdio.h> #include<iostream> using namespace std; void Reverse_Array( int begin, int end, char *str) { char temp; while(begin < end ) { temp=str[begin]; str[begin]=str[end]; str[end]=temp; end--; begin++; } } char * Reverse( char *str) { int j=0,i=0; int begin,end; char temp; j=strlen(str)-1; //第一步是进行全盘翻转,将单词变成
".gnijnan morf emoc i" //下面while循环和
Reverse_Array(i,j,str);是等价的 // while(j>i) // { // temp=str[i]; // str[i]=str[j]; // str[j]=temp; // j--; // i++; // } Reverse_Array(i,j,str); printf("全盘翻转str=..>>
%s\n\n",str); i=0; //第二步 进行部分翻转,如果不是空格,则开始翻转单词 while(str[i]) { if(str[i]!=' ')//查询一个单词的起点和终点 { begin=i;//保存一个单词的起点 while(str[i]&&str[i]!=' ') { i++; } end=i-1;//保存一个单词的终点 } //下面while循环和
Reverse_Array(begin,end,str);是等价的 // while(end>begin) //记录每个单词的起点和始点,并翻转 // { // temp=str[begin]; // str[begin]=str[end]; // str[end]=temp; // end--; // begin++; // } Reverse_Array(begin,end,str); //此时的i指向空格字符,为了继续循环,要i++,让i指向下一个非空格字符 i++; printf("部分翻转str=..>>
%s\n",str); } printf("\n",str); return str; } int main(void) { int j=0,i=0,flag=0,begin,end; char str[]="I
come from NanJing。",temp; j=strlen(str)-1; printf("初始string=.>>>
%s\n\n",str); char *str2 =
Reverse(str); printf("结果string222=.>>>
%s\n\n",str); return 0; } 初始string=.>>>
I come from NanJing。 全盘翻转str=..>>
!gniJnaN morf
emoc I 部分翻转str=..>>
NanJing。 morf emoc I 部分翻转str=..>>
NanJing。 from emoc I 部分翻转str=..>>
NanJing。 from come I 部分翻转str=..>>
NanJing。 from come I 部分翻转str=..>>
NanJing。 from come I 结果string222=.>>>
NanJing。 from come I Press any key to continue |
|