使用C++编程语言设计一个程序,反转字符串中单词的顺序

输入一个字符串s,设计程序反转字符串中单词的顺序

输入:s = "the sky is blue"
输出:"blue is sky the"

程序如下:

#include
#include
#include
#include//计算代码所需要的时间
using namespace std;

class Solution
{
public:

     //移除字符串中多余的空格
    void removeExtraSpaces(string& s)
    {
        int fast, slow = 0;//定义快慢指针
        for (fast = 0; fast < s.size(); fast++)
        {
            if (s[fast] != ' ')
            {
                if (slow != 0)
                {
                    s[slow] = ' ';
                    slow++;
                }
                while (fast < s.size() && s[fast] != ' ')
                {
                    s[slow++] = s[fast++];
                }
            }
        }
        s.resize(slow);
    }

    string reverseWords(string s)
    {
        //erase的时间复杂度是O(n)
        //必须先移除额外的空格
        removeExtraSpaces(s);//去除所有空格
        cout << "去除空格后的字符串为:" << s << endl;
        reverse(s.begin(), s.end());//将完整的字符串反转
        cout << "反转后的字符串为:" << s << endl;
        int start = 0;
        for (int i = 0; i <= s.size(); i++)
        {
            if (i == s.size() || s[i] == ' ')//到达串尾或者空格,表示单词结束
            {
                reverse(s.begin() + start, s.begin() + i);
                start = i + 1;
            }
        }
        return s;
    }
};

int main()
{
    clock_t starttime, endtime;
    starttime = clock();//计时开始
    Solution solution;
    string s;
    cout << "请输入字符串:" << endl;
    getline(cin, s);
    cout << "原始字符串为:" <

注意事项;

1.使用reverse函数时,要注意s.end(),虽然s.begin()指的是开头第一个字符,但s.end()并非指的是最后一个字符,而是最后一个字符再加1的位置;

2.输入字符串不能使用cin,cin遇到空格就会结束,必须使用getline();

你可能感兴趣的:(c++,字符串,数据结构与算法,C++,数据结构与算法,字符串,双指针算法,leetcode,算法,开发语言)