質問

ユーザーから番号のリストを取得し、それらをトークン化するにはどうすればよいですか。

これは私が持っているものですが、最初の番号以外は何も得られません。

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

using namespace std;

int main()
{

    string line = "";
    cin >> line;

    stringstream lineStream(line);

    int i;
    vector<int> values;

    while (lineStream >> i)
        values.push_back(i);

    for(int i=0; i<values.size(); i++)
        cout << values[i] << endl;

    system("PAUSE");
    return 0;
}

関連記事:
C ++、文字列から文字列への移動
INTトークネザー

役に立ちましたか?

解決

私はCIN >> Whitespaceで壊れると信じています。つまり、最初の番号が入力されているだけです。

試す:

getline(cin, line);

他のヒント

これがおそらくから値を読む最も簡単な方法です cin コンテナに:

#include <iostream>
#include <iterator>
#include <vector>

int main()
{
    std::vector<int> values;
    std::copy(
        std::istream_iterator<int>(std::cin), 
        std::istream_iterator<int>(),
        std::back_inserter(values));

    // For symmetry with the question copy back to std::cout
    std::copy(
        values.begin(),
        values.end(),
        std::ostream_iterator<int>(std::cout,"\n"));

}

DonnieがWhitespaceでCin Breaksに言及したように、これを克服してください。「getline()」を使用できます。次の例はうまく機能します。

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

using namespace std;

int main()
{

    string line = "";
    ::getline(std::cin,line,'\n');

    std::stringstream lineStream(line);

    int i;
    std::vector<int> values;

    while (lineStream >> i)
        values.push_back(i);

    for(int i=0; i<values.size(); i++)
        cout << values[i] << endl;

    system("PAUSE");
    return 0;
}

メインに加えて

string line = "";
getline (cin, line );
stringstream lineStream(line);

うん、そしてgetlineの文字列バージョンであり、no istreamのものです。

OK:Pavel Minaevには最良の答えがあります。
しかし、すべての人々は、CINが空白で壊れると言及しています。
それは良いことです(白い空間も無視するからです)。

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

using namespace std;

int main()
{

    int i;
    vector<int> values;

    // prefer to use std::copy() but this works.
    while (std::cin >> i)
    {
        values.push_back(i);
    }

    // prefer to use std::copy but this works.
    for(vector<int>::const_iterator loop = values.begin();loop != values.end();++loop)
    {
        cout << *loop << endl;
    }

    return 0;
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top