我有一个类似的文本文件:
cat dog
mom dad
is have
black ears
!stop
blah blah blah
我想将这些文本文件单词分成两个数组,所以我可以有2个数组;一个包含
cat mom is black
和另一个
dog dad have ears
我想知道我该怎么做,因为我知道如何制作一个长阵列但不知道如何制作两个 而且单词总是很短 - 就像不超过十个字符
答案 0 :(得分: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);
}
答案 1 :(得分: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);
}
}