2014-01-12 99 views
-2

我有一個文本文件是這樣的:從文本文件,如何使兩個數組包含單詞

cat dog 
mom dad 
is have 
black ears 
!stop 
blah blah blah 

,我想將這些文本文件的話分成兩列,所以我可以有2列;一個包含

cat mom is black 

和其他

dog dad have ears 

我想知道我該怎麼辦,因爲我知道如何使一個多頭排列但不知道如何做兩個 還的話永遠是短 - 比如不超過十個字符

+0

但你有什麼試過? – 0x499602D2

+0

看起來你想讀一行,如果行不是'!stop',則從行中讀取兩個單詞並將它們插入到不同的數組中。看起來很簡單... –

+2

這個問題過於寬泛,因爲你要求其他人爲你寫代碼。 – bmargulies

回答

0

唯一棘手的部分似乎是終止,例如,當只有一個字就行了。一個簡單的辦法是讀線,然後對它們進行解碼,但是,相反,項目可以讀出:第一和第二項之間不應該有換行,並應該有第二個項目後換行:

#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); 
    } 
} 
0

最明顯的做法似乎是這樣的:

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); 
} 
+0

這當然會產生不同的結果,因爲它快樂地超越了'!stop',並且會在第一個數組中產生條目'!stop'和'blah'並且在第二個數組中產生'blah'' blah'。看起來,這可能會使用一個很好的'end_of_line'操縱器;) –

+1

@DietmarKühl:當然 - 雖然我很好地讓一個人至少在正確的大方向開始,但我不會完成他們的他們的作業。 –

相關問題