• LeetCode151:Reverse Words in a String


    题目:

    Given an input string, reverse the string word by word.

    For example,
         Given s = "the sky is blue",
         return "blue is sky the".

    Clarification:

    • What constitutes a word?
      A sequence of non-space characters constitutes a word.
    • Could the input string contain leading or trailing spaces?
      Yes. However, your reversed string should not contain leading or trailing spaces.
    • How about multiple spaces between two words?
      Reduce them to a single space in the reversed string.

    实现代码:

    #include <iostream>
    #include <algorithm>
    #include <stack>
    #include <string>
    #include <sstream>
    using namespace std;
    
    /*
    
    Given an input string, reverse the string word by word.
    
    For example,
    Given s = "the sky is blue",
    return "blue is sky the".
    
    Clarification:
    What constitutes a word?
    A sequence of non-space characters constitutes a word.
    Could the input string contain leading or trailing spaces?
    Yes. However, your reversed string should not contain leading or trailing spaces.
    How about multiple spaces between two words?
    Reduce them to a single space in the reversed string.
    */
    
    class Solution {
    public:
        void reverseWords(string &s) 
        {
            
            reverse(s.begin(), s.end());
            string::iterator p_iter = s.begin();
            string::iterator q_iter;
            
            //去除最前面和最后面的空白符
            int index = s.find_first_not_of(' ');
            if(index == string::npos)//如果字符串全为空白符 
            {
                s.clear();
                return;
            }
            s.erase(s.begin(), s.begin()+index);
            int index2 = s.find_last_not_of(' ');
            s.erase(s.begin()+index2+1, s.end()); 
                            
            p_iter = s.begin();
            while(p_iter != s.end())
            {            
                q_iter = p_iter;
                while(*p_iter != ' ' && p_iter != s.end()) p_iter++;
                reverse(q_iter, p_iter);
                bool first = true;
                while(*p_iter == ' ' && p_iter != s.end())//去掉单词间多个空白符,只留下一个 
                {
                    if(first)
                    {
                        p_iter++;
                        first = false;
                    }                    
                    else
                        p_iter = s.erase(p_iter);
                }
    
            }
        }
    
        
     
    };
    
    int main(void)
    {
        string str = " this is   zhou ";
        Solution solution;
        solution.reverseWords(str);
        cout<<str<<endl;
        return 0;
    }
  • 相关阅读:
    Bugs及解决方案列表
    CSS技巧和经验
    我的越权之道
    密码找回逻辑漏洞总结
    业务安全漏洞挖掘归纳总结【转载】
    User Agent
    影响网站页面打开速度的三个因素
    iframe 透明
    ie对行高line-height的诡异解释
    A标记点击后去掉虚线
  • 原文地址:https://www.cnblogs.com/mickole/p/3669584.html
Copyright © 2020-2023  润新知