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