字符串中单词的逆转,即将单词出现的顺序进行逆转。如将“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 }

若指针指向一个字符串,这个字符串是保存在数据段常量区的,是不可以修改的。但我们可以让这个指针指向其他的字符串。

但是所示数组保存字符串的话,是存在栈区的,数组又是常量指针,即数组的这地址是不可以修改的,所以上面程序不会修改字符串的值。

要想字符指针像字符数组一样使用,需要提前申请相应的的内存空间,并在使用完以后对他进行释放。

 

 

posted @ 2018-09-09 10:46  浪里飞  阅读(350)  评论(0编辑  收藏  举报