2014-01-12 60 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:当然 - 虽然我很好地让一个人至少在正确的大方向开始,但我不会完成他们的他们的作业。 –

相关问题