比如输入I love sports输出为sports love I
单词之间以空格隔开,单词之间可能有多个空格,字符串末尾也有可能有多个空格
思想为先实现整个字符串的翻转。
整个字符串的翻转可以设置两个指针,一个指针p1指向字符串开头,一个指针p2指向字符串末尾,p1从前后后移动,p2从后往前移动。
不断交换着两个指针指向的字符的值。直到p1>=p2停止这个过程
对翻转后的字符串可以以每个单词为单位进行翻转。遇到空格便可以提取相应的单词。翻转单词方法与翻转字符方法相同
#include<iostream>
using namespace std;
char *ReverseString(char *begin,char *end){
char *res=begin;
char temp;
while(begin<end){
temp=*begin;
*begin++=*end;
*end--=temp;
}
return begin;
}
char *ReverseByWord(char *src){
if(src==NULL)return NULL;
char *left;
char *right=src;
while(*right!='\0'){
left=right;
while(*right!=' '&&*right!='\0')
right++;
ReverseString(left,right-1);
//maybe multiple blanks between words
while(*right==' ')
right++;
}
return src;
}
char *Reverse(char *src){
ReverseString(src,src+strlen(src)-1);
ReverseByWord(src);
return src;
}
int main(){
char src[]="I love sports ";
Reverse(src);
cout<<src<<endl;
}