1

我正在学习如何在课堂上为程序拆分字符串,我遇到了这个例子。

#include <string>
#include <sstream>
#include <iostream>

int main()
{
    std::string str = "23454323 ABCD EFGH";

    std::istringstream iss(str);

    std::string word;
    while(iss >> word)
    {
        std::cout << word << '\n';
    }
}

我进行了修改,以便用户输入字符串,但如果我输入存储在 str 中的字符串,我得到 23454323 而不是字符串中的其他材料。

#include <string>
#include <sstream>
#include <iostream>
using namespace std;
int main()
{
    string str;
    cout<<"Enter a postfix with a space between each object:";
    cin>>str;
    istringstream iss(str);

    string word;
    while(iss >> word)
    {
        cout << word << '\n';
    }
}

好的,谢谢大家的帮助!

4

3 回答 3

2

您需要稍微修改输入代码才能使其正常工作。利用:

getline(cin, str);

代替:

cin >> str;

后者将停止读取空白字符上的字符串。

于 2013-10-28T18:51:11.093 回答
0

因为您使用与输入时相同的输入运算符istringstreamfromcin并且它总是在空格处中断。

这意味着您只能从用户那里读取一个单词。你想用std::getline.

于 2013-10-28T18:50:54.970 回答
0

就像iss >> word从 读​​取单个空格分隔的单词一样isscin >> str只需从 读取第一个单词cin

要阅读整行,请使用getline(cin, str).

(另外,要改掉转储namespace std到全局命名空间的习惯。随着程序的增长,它会导致问题。)

于 2013-10-28T18:51:01.670 回答