/************************************************************************/ /* 面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循環(huán)和
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循環(huán)和
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指向空格字符,,為了繼續(xù)循環(huán),要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 |
|