给定一个字符串,逐个翻转字符串中的每个单词。
说明
- 单词的构成:无空格字母构成一个单词
- 输入字符串是否包括前导或者尾随空格?可以包括,但是反转后的字符不能包括
- 如何处理两个单词间的多个空格?在反转字符串中间空格减少到只含一个
怎么说?
思路就是把单词提取出来先存入vector里,然后再从后往前一个一个取出来。
分离单词就按照空格来分离:
遍历字符串
如果不是空格,把这个字符加到一个string上。比如命名为temp。
如果是空格,看temp是否为空,如果不空,把temp放到vector 里,然后把temp清零。
这两部是主要的思路,遍历完成之后,再检查一下temp是否为空(最后一个单词之后可能没有空格),如果不空,把temp再放入vector中。
注意几种特殊情况:
- 本身字符串为空,在最开始就判断。
- 本身全部是空格,那么遍历结束之后vector应该是空的。
string reverseWords(string &s) {
if(s.size()==0)
return string();
string temp; //存放单词的string
vector<string> strings;
string res;
for(auto ss:s)
{
if(ss!=' ') //当前不是空格,就加进去
{
temp+=ss;
}
else if(temp.size()!=0) //就是遇到空格了,遇到空格就检查temp里是否有东西
{
strings.push_back(temp);
temp=string();
}
}
if(temp.size()!=0) //最后一个单词之后如果没有空格,temp里就存的最后一个单词
{
strings.push_back(temp);
}
if(strings.size()==0) //如果全部是空格,那么strings应该为空
return string();
else //从后往前把vector里面的单词拿出来。
{
for(auto end=strings.end()-1;end>strings.begin();end--)
{
res+=(*end+' ');
}
res+=*strings.begin();
return res;
}
// write your code here
}