尼科的答案可能是一个更好的路径给你,但对于那些谁喜欢比较惯用的方式,我建议你可以轻松地打印向后一旦存储线的向量。的第一件事将是一个Line
类,你可以用它来阅读习惯用法,而不是在空间停止输入线:
struct Line {
std::string str;
};
std::istream &operator>>(std::istream &in, Line &line) {
std::getline(in, line.str);
if (line.str == "stop") {
in.clear(std::ios::failbit);
}
return in;
}
std::ostream &operator<<(std::ostream &out, const Line &line) {
out << line.str;
return out;
}
我们所有的Line
需求与实际的文本字符串,我已经添加了输入和为它输出支持,因为你接下来会看到。注意输入是通过getline
而不是>>
。这是Line
课程的主要目的。输入“停止”后,我也失败了。如果没有,它会继续读取直到EOF。
现在,您可以用最小的努力重新使用线类,以便根据需要对输入进行形状修改。接下来,我们去使用我们刚刚创建(或可能从别的东西离开了):
int main() {
std::istream_iterator<Line> in1(std::cin), in2;
std::vector<Line> inputs(in1, in2);
std::reverse_copy(std::begin(inputs), std::end(inputs), std::ostream_iterator<Line>(std::cout, "\n"));
}
我们做的第一件事是形成通过读取输入(使用Line
我们的输入支持)的向量。当到达文件末尾或输入“停止”时,它将停止,并且每一行输入都将很好地存储在我们的向量中。接下来,我们将reverse_copy
复制到我们的向量(每行输入)到标准输出,由换行符分隔,但全部向后完成,因此我们以相反的顺序结束每行。
就是这样!一旦生成了Line
类,获取行输入和反转它们的算法可以保持不变,就好像我们用单词进行操作一样,但切换到行只需要用Line
替换std::string
的几个实例。
'y'不是简单的'矢量'吗?你知道这两个函数不存在字符串吗? –
抱歉,我还没有矢量图的知识。 – user1940749
它是否必须“停止”?文件结尾往往会更好地处理所有事情。如果你是在要求它的话,记住这一点。 – chris