字元串中單詞的逆轉,即将單詞出現的順序進行逆轉。如将“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 }
若指針指向一個字元串,這個字元串是儲存在資料段常量區的,是不可以修改的。但我們可以讓這個指針指向其他的字元串。
但是所示數組儲存字元串的話,是存在棧區的,數組又是常量指針,即數組的這位址是不可以修改的,是以上面程式不會修改字元串的值。
要想字元指針像字元數組一樣使用,需要提前申請相應的的記憶體空間,并在使用完以後對他進行釋放。