1. 程式人生 > >實現字串中單詞的逆轉,即將單詞出現的順序進行逆轉。如將"how are you "逆轉為"you are how!"

實現字串中單詞的逆轉,即將單詞出現的順序進行逆轉。如將"how are you "逆轉為"you are how!"

1.將字串中單詞逆轉                                                                                                                                                      思路:先將how are you 中的每一個單詞逆序,變成woh era uoy,再把woh era uoy 這個整體字串逆轉,則就達到目的!

#include<stdio.h>

#include<string.h>
void Rotate(char *start,char *end)    //將一個字串逆轉
{
if(start == NULL || end == NULL) return ;
while(start<end)
{
   char temp = *start;
   *start = *end;
   *end = temp;
   --end;++start;
}
}
void RotateString(char *a,int n)
{
    int i,j;
    char *k =a;
    char *s = a;
    while(*k != '\0')  //在這個while迴圈中將字串變換為woh era uoy,先把how逆序,再把are逆序,再把you逆轉!
    {
      if(*k == ' ')
      {
         ++k;++s;
         continue;
      }
      else if(*s == ' ' || *s == '\0')
      {
         Rotate(k,--s);    //此處k是一個字串起始的位置,s是到空格位置的下標,s-1是去掉空格,比如說how,k就是0,s就是3,把how逆轉,去掉空格,s-去掉空格。
         k = ++s;//此處逆轉完how了,k=3,s=3此時k和s都是空格,再往下遍歷,k=++s,此時K=3,s也等於3,再進行下一個are
      }
         else
          ++s;
    }
      k = a;  //把woh era uoy 整體對換,第一個和最後一個對換,把第二個和倒數第二個交換,,,,,,,,直到最後一個。最後的結果為you are how
      Rotate(k,s-1);  此處k=0,s=11;
      printf("%s\n",a);
}
int main()
{
char a[] ="how are you";
printf("source string: %s\n",a);
RotateString(a,11);
return 0;

}

列印結果:                                                                                                                                                                       [email protected]:~/zhanghong$ ./a.out 
source string: how are you
you are how
[email protected]:~/zhanghong$