#include <iostream>
#include <sstream>
#include <fstream>
#include <vector>
#include <string>
int main(int argc, char *argv[])
{
std::vector<std::string> vec;
std::string line;
std::ifstream in(argv[1]);
while(!in.eof()) {
std::getline(in,line);
vec.push_back(line);
}
std::istringstream is;
line = "";
for(auto a:vec) {
for(auto i = a.begin(); i != a.end(); i++) {
if(!(isspace(*i) | ispunct(*i)))
line += *i;
else {
is.str(line);
std::cout << is.str() << std::endl;
line = "";
}
}
}
std::cout << is.str() << std::endl;
return 0;
}
我编写了一个程序,它接受一个文件并将每一行放入一个字符串向量中。然后从元素中一次读取一个单词。
当我从向量中读取时,我无法指定新行。我的输出连接了一行的结尾和下一行的开头。如何指定有一个新行?
我正在阅读的文件内容:
Math 3 2
Math 4 3
Math 5 4
Phys 3 1
Math 3 1
Comp 3 2
我得到的输出:
Math
3
2Math
4
3Math
5
4Phys
3
1Math
3
1Comp
3
3
编辑::
澄清一下,向量元素的构造是正确的。如果我从 for(auto a:vec) 打印一个 in,它会像文件一样逐行给我。当我尝试从向量中的每个字符构建单词时。我在问我该怎么做才能指定有一个新行,以便
line += a[i]
当它到达一行的末尾时不会继续添加到行。