天天看點

字元串中單詞的逆轉,即将單詞出現的順序進行逆轉。如将“Today is Friday!”逆轉為“Friday! is Today”.

字元串中單詞的逆轉,即将單詞出現的順序進行逆轉。如将“Today is Friday!”逆轉為“Friday! is Today”.
 48 
 49 #include<iostream>
 50 #include<stdio.h>
 51 void Reverse(char *pb,char *pe)
 52 {
 53     if(pb==NULL||pe==NULL)
 54         return;
 55     while(pb<pe)
 56     {
 57         char tmp=*pb;
 58         *pb=*pe;
 59         *pe=tmp;
 60         pb++,pe--;
 61     }
 62 }
 63 
 64 char *ReverseSentence(char *pData)
 65 {
 66     if(pData==NULL)
 67         return NULL;
 68     char *pBegin=pData;
 69     char *pEnd=pData;
 70     while(*pEnd!='\0')
 71         pEnd++;
 72     pEnd--;
 73     Reverse(pBegin,pEnd);
 74     pBegin=pEnd=pData;
 75     while(*pBegin!='\0')
 76     {
 77         if(*pBegin==' ')
 78         {
 79             pBegin++;
 80             pEnd++;
 81             continue;
 82         }
 83         else if(*pEnd==' '||*pEnd=='\0')
 84         {
 85             Reverse(pBegin,--pEnd);
 86             pBegin=++pEnd;
 87         }
 88         else
 89             pEnd++;
 90 
 91     }    
 92 //    printf("%s",pData);
 93     return pData;
 94 }
 95 
 96 int main()
 97 {
 98     char str[]="Today is Friday!";  //在主函數中傳入調用函數的值必須是字元數組類型的值
 99     char *str1;              //而不能使指向字元串的指針,否則被調用函數無法通路字元串。
100     printf("源字元串為:%s\n",str);
101 str1=ReverseSentence(str);
102     while(str1!='\0')
103     {
104         std::cout<<*str1;
105         str1++;
106     }
107 //    std::cout<<std::endl;
108     return 0;
109 }      
若指針指向一個字元串,這個字元串是儲存在資料段常量區的,是不可以修改的。但我們可以讓這個指針指向其他的字元串。      

但是所示數組儲存字元串的話,是存在棧區的,數組又是常量指針,即數組的這位址是不可以修改的,是以上面程式不會修改字元串的值。

要想字元指針像字元數組一樣使用,需要提前申請相應的的記憶體空間,并在使用完以後對他進行釋放。