Reverse Words in a String

注意题目的特殊要求:

最后结果前后不能有空格,每个单词之间的空格只能有一个。

void reverse_one_word(string &s, int begin, int end)
    {
        while(begin<end)
        {
            char temp=s[begin];
            s[begin++]=s[end];
            s[end--]=temp;
        }
        
    }
    void reverseWords(string &s) {
        int i=0;
        int j=0;
        int word=0;
        
        while(true)
        {
            while(i<s.size()&&s[i]==' ')
                i++;
            if(i==s.size())
                break;
            if(word)
                s[j++]=' ';
            int l=j;
            while(i<s.size()&&s[i]!=' ')
                s[j++]=s[i++];
            reverse_one_word(s,l,j-1);
            word++;
            
        }
        
        s.resize(j);
        reverse_one_word(s,0,j-1);
        
    }

这里使用了string类的resize函数,将s变为长度为j的字符串(删除多余字符,或者补默认字符)。

这种方法没有申请新的空间,相当于原地重新构建字符串,通过i来不断寻找下一个单词的位置。

posted on 2016-04-28 18:37  summerkiki  阅读(124)  评论(0编辑  收藏  举报