如何将字符串中的所有单词写入不同的变量?

时间:2012-04-28 17:41:03

标签: c++ string cin

我想获得一行字符串并将每个单词写入其自己的变量中,以便我可以在if子句中使用它们。

我试过了:

cin >> var1;  
cin >> var2;
cin >> var3;
cin >> var4;

但这仅在输入4个单词时才有效。我需要一种计算单词的方法,因为我不知道用户输入的单词是1,2,3,4还是更多。

也许有一种获取整个字符串的方法:

getline(cin, string1);

然后把它剪成文字。 对不起,我搜索了很多,但我找不到办法。

我也尝试将cinbuffer写入变量,但我能做到的唯一方法就是

cin >> varx;

只有在cinbuffer中有东西时才有用。如果没有,则再次要求用户输入。

编辑:刚发现这个,对我有用。不管怎么说,还是要谢谢你! C++ cin whitespace question

3 个答案:

答案 0 :(得分:2)

你走在正确的轨道上。您可以使用getline()读取一行,然后使用istringstream将该行视为自己的流。对于您碰巧使用的任何类型T,请更改此内容。

#include <algorithm>
#include <iostream>
#include <iterator>
#include <sstream>
#include <vector>

int main(int argc, char** argv) {

    using namespace std;

    vector<T> values;

    {
        string line;
        getline(cin, line);
        istringstream stream(line);

        // Read values into vector.
        copy(istream_iterator<T>(stream), istream_iterator<T>(),
            back_inserter(values));
    }

    cout << "Received " << values.size() << " values:\n";

    // Copy values to output.
    copy(values.begin(), values.end(),
        ostream_iterator<T>(cout, "\n"));

    return 0;

}

答案 1 :(得分:0)

将事物写入这样的不同变量通常是错误的答案。看起来你想要像array这样的东西。

答案 2 :(得分:0)

听起来像你使用getline

http://www.cplusplus.com/reference/string/getline/

然后使用boost split这样的东西将每个项目转储到数组中

http://www.cplusplus.com/faq/sequences/strings/split/