3

ストリーム イテレータを使用して、コンソールから単語を読み込んで出力しようとしています。これが私の試みです:

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

using namespace std;

int main()
{
    vector<string> stringVec;

    copy(istream_iterator<string>(cin), istream_iterator<string>(), back_inserter(stringVec));

    sort(stringVec.begin(), stringVec.end());

    unique_copy(stringVec.cbegin(), stringVec.cend(), ostream_iterator<string> (cout, "\n"));

    return 0;
}

コンソールで「これです」と入力して Return キーを押すと、カーソルが点滅し続けます (入力待ちであることを示します)。

誰かが私のアプローチについていくつかの洞察を提供してもらえますか?

前もって感謝します。

4

2 に答える 2

2

istream_iterator<string>()ストリームの終わりのイテレータを構築するに EOF を提供する必要があります。

Ctrl+ZorF6または ( Linux では) を使用Ctrl+Dして、ストリームからの入力の取得を停止します。

于 2013-09-22T08:28:24.790 に答える
1

あなたの場合、 と を使用できgetlineますistringstream。まで文字列を読み取り、\nそれをコピーに渡します。

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

...

vector<string> stringVec;

string str;
getline(cin, str);
istringstream ss(str);

copy(istream_iterator<string>(ss),
     istream_iterator<string>(),
     back_inserter(stringVec));

sort(stringVec.begin(), stringVec.end());

unique_copy(stringVec.cbegin(),
            stringVec.cend(),
            ostream_iterator<string> (cout, "\n"));

1 日に 2 つの同じ質問については、こちらをお読みください。

于 2013-09-22T08:41:35.383 に答える