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;
}

当我在控制台中输入“this is it”并按 Return 时,那里的光标一直在闪烁(表示它正在等待输入)。

任何人都可以对我的方法提供一些见解吗?

提前致谢。

4

2 回答 2

2

您需要为 提供一个 EOF istream_iterator<string>(),它构造了流结束迭代器。

使用Ctrl+ZorF6或(Ctrl+D在 linux 上)停止从流中获取输入

于 2013-09-22T08:28:24.790 回答
1

在您的情况下,您可以使用getlineand 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"));

一天有两个相同的问题,你可以看这个

于 2013-09-22T08:41:35.383 回答