在 C++ 中拆分字符串

Splitting a string in c++

我正在编写一个函数来反转字符串中的单词。我的想法是用 ' ' 拆分一个字符串,将单词压入堆栈,然后将它们弹出以打印单词反转的字符串。

但是,我无法使用 stringstream class.

拆分字符串

我的代码如下:

#include<iostream>
#include<stdlib.h>
#include<string.h>
#include<stack>
#include<string>
#include<bits/stdc++.h>

using namespace std;


void reverse_words(string s){

    stack <string> stack_words;

    string popped_element;

    string result = "";

    stringstream split(s);

    string token;

    while(getline(split,token,' ')){

        cout<<"pushed "<<token;
        stack_words.push(token);
    }

    while(!stack_words.empty()){

        popped_element = stack_words.top();
        stack_words.pop();

        result.append(" ");
        result.append(popped_element);

    }

    cout<<result;

}



int main(){

    string s,res;

    cout<<"\n Enter a string :";
    cin>>s;

    reverse_words(s);

}


例如,当我输入“Hello World”时,只有 'Hello' 被压入堆栈,而我需要 'Hello' 和 'World' 都出现在堆栈中。

有人知道我的代码有什么问题吗?

这个怎么样?

#include <bits/stdc++.h>
#include <iostream>

using namespace std;

void reverseWords(string s)
{
    vector<string> tmp;

    string str = "";

    for (int i = 0; i < s.length(); i++) 
    {
        if (s[i] == ' ') 
        {
            tmp.push_back(str);
            str = "";
        }
        else
            str += s[i];
    }
    tmp.push_back(str);
    int i;
    for (i = tmp.size() - 1; i > 0; i--)
        cout << tmp[i] << " ";

    cout << tmp[0] << endl;
}

int main()
{
    string s;
    getline(cin,s);
    reverseWords(s);
    return 0;
}

在您的情况下,流提取器 (operator >>) 在 Hello world 中的 space 之后停止读取,因此 s="Hello"。 要解决此问题,请使用 getline(cin,s);

已编辑以包含 @Pete Becker

所述的更多详细信息