我有一个文本文件是这样的:从文本文件,如何使两个数组包含单词
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