53. 翻转字符串

给定一个字符串,逐个翻转字符串中的每个单词。
说明

  1. 单词的构成:无空格字母构成一个单词
  2. 输入字符串是否包括前导或者尾随空格?可以包括,但是反转后的字符不能包括
  3. 如何处理两个单词间的多个空格?在反转字符串中间空格减少到只含一个

怎么说?

思路就是把单词提取出来先存入vector里,然后再从后往前一个一个取出来。
分离单词就按照空格来分离:
遍历字符串
如果不是空格,把这个字符加到一个string上。比如命名为temp。
如果是空格,看temp是否为空,如果不空,把temp放到vector 里,然后把temp清零。

这两部是主要的思路,遍历完成之后,再检查一下temp是否为空(最后一个单词之后可能没有空格),如果不空,把temp再放入vector中。
注意几种特殊情况:

  1. 本身字符串为空,在最开始就判断。
  2. 本身全部是空格,那么遍历结束之后vector应该是空的。
string reverseWords(string &s) {
        if(s.size()==0)
        return string();
        string temp;   //存放单词的string
        vector 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
    }

你可能感兴趣的:(53. 翻转字符串)