尼科的答案可能是一個更好的路徑給你,但對於那些誰喜歡比較慣用的方式,我建議你可以輕鬆地打印向後一旦存儲線的向量。的第一件事將是一個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