LeetCode OJ上的一道题,题目要求如下:
Given an input string, reverse the string word by word.
For example,
Given s = "the sky is blue
",
return "blue is sky the"
第一次提交了才发现自己考虑的还不够全面,下面再举几个例子:
Given s=" " return ""
Given s=" a b " return "a b"
接下来给出我最后提交的版本,个人体会,这道题主要还是侧重于考虑问题的完整性上:
class Solution {
public:
void reverseWords(string &s) {
int i=0,num=0;//num用来记录字符串中单词的长度
string temp;
while(s[0]==' ') s=s.substr(1,s.size()-1);//用来消去字符串前面的空格
int last=s.size()-1;
while(s[last]==' ') {//用来消去字符串后面的空格
last--;
s=s.substr(0,s.size()-1);
}
for(i=s.size();i>=0;i--){//定位每个单词的范围
if(s[i]==' '){
temp=temp+s.substr(i+1,num)+" ";//复制单词到temp中
num=0;
last=i-1;
while(s[i-1]==' '){
i--;
last=i-1;
}
}
else
num++;
}
s=temp+s.substr(0,last+1);//执行退出for循环之后的最后一个单词的操作
}
};