字符串中单词的逆转,即将单词出现的顺序进行逆转。如将“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 }
若指针指向一个字符串,这个字符串是保存在数据段常量区的,是不可以修改的。但我们可以让这个指针指向其他的字符串。
但是所示数组保存字符串的话,是存在栈区的,数组又是常量指针,即数组的这地址是不可以修改的,所以上面程序不会修改字符串的值。
要想字符指针像字符数组一样使用,需要提前申请相应的的内存空间,并在使用完以后对他进行释放。