我有一個文本文件是這樣的:從文本文件,如何使兩個數組包含單詞
cat dog
mom dad
is have
black ears
!stop
blah blah blah
,我想將這些文本文件的話分成兩列,所以我可以有2列;一個包含
cat mom is black
和其他
dog dad have ears
我想知道我該怎麼辦,因爲我知道如何使一個多頭排列但不知道如何做兩個 還的話永遠是短 - 比如不超過十個字符
我有一個文本文件是這樣的:從文本文件,如何使兩個數組包含單詞
cat dog
mom dad
is have
black ears
!stop
blah blah blah
,我想將這些文本文件的話分成兩列,所以我可以有2列;一個包含
cat mom is black
和其他
dog dad have ears
我想知道我該怎麼辦,因爲我知道如何使一個多頭排列但不知道如何做兩個 還的話永遠是短 - 比如不超過十個字符
唯一棘手的部分似乎是終止,例如,當只有一個字就行了。一個簡單的辦法是讀線,然後對它們進行解碼,但是,相反,項目可以讀出:第一和第二項之間不應該有換行,並應該有第二個項目後換行:
#include <iostream>
#include <fstream>
std::istream& noeol(std::istream& in) {
for (int c; (c = in.peek()) != std::char_traits<char>::eof()
&& std::isspace(c); in.get()) {
if (c == '\n') {
in.setstate(std::ios_base::failbit);
}
}
return in;
}
std::istream& eol(std::istream& in) {
for (int c; (c = in.peek()) != std::char_traits<char>::eof()
&& std::isspace(c); in.get()) {
if (c == '\n') {
return in;
}
}
in.setstate(std::ios_base::failbit);
return in;
}
int main() {
std::ifstream in("some.txt");
std::vector<std::string> c0, c1;
for (std::string s0, s1; in >> s0 >> noeol >> s1 >> eol;) {
c0.push_back(s0);
c1.push_back(s1);
}
}
最明顯的做法似乎是這樣的:
std::vector<std::string> column1, column2;
std::ifstream in("filename.txt");
std::string a, b;
while (in >> a >> b) {
column1.push_back(a);
column2.push_back(b);
}
這當然會產生不同的結果,因爲它快樂地超越了'!stop',並且會在第一個數組中產生條目'!stop'和'blah'並且在第二個數組中產生'blah'' blah'。看起來,這可能會使用一個很好的'end_of_line'操縱器;) –
@DietmarKühl:當然 - 雖然我很好地讓一個人至少在正確的大方向開始,但我不會完成他們的他們的作業。 –
但你有什麼試過? – 0x499602D2
看起來你想讀一行,如果行不是'!stop',則從行中讀取兩個單詞並將它們插入到不同的數組中。看起來很簡單... –
這個問題過於寬泛,因爲你要求其他人爲你寫代碼。 – bmargulies