file.txt
a
b
c
a
b
c1 x c2
d
a,b,c,c1,c2,d都是一些值。
我的功能
void Menu::readFile() {
string line;
ifstream myfile ("file.txt");
if (myfile.is_open()) {
while (getline (myfile, line)) {
cout << line << "\n";
}
myfile.close();
} else cout << "Unable to open file";
}
这只是返回文件的内容,我如何读取文件并将每一行解析为变量。每个换行符都会分隔对象。
答案 0 :(得分:1)
void Menu::readFile() {
string line;
vector <string> lines;
ifstream myfile ("file.txt");
if (myfile.is_open()) {
while (getline (myfile, line)) {
cout << line << "\n";
lines.push_back(line);
}
myfile.close();
} else {
cout << "Unable to open file";
}
}
变量行将包含所有行。
答案 1 :(得分:0)
此功能不是返回任何内容。它被声明,因此它不能返回任何值。你所拥有的已经逐一解析了这些行。现在,而不是在这一行上打印它们:
cout << line << "\n";
你应该将它们存放在某个容器中,例如std::vector<std::string>
。
答案 2 :(得分:0)
最好使用列表或矢量。以下是使用算法和迭代器的示例:
#include <iostream>
#include <iterator>
#include <vector>
#include <algorithm>
int main() {
std::vector<std::string> vals;
std::copy(
std::istream_iterator<std::string>(std::cin),
std::istream_iterator<std::string>(),
std::back_inserter(vals)
);
// Print them out, appending a newline to each word
std::copy(
vals.begin(),
vals.end(),
std::ostream_iterator<std::string>(std::cout, "\n")
);
}
您可以将任何std::istream
对象初始化替换为std::istream_iterator
;特别是你的myfile
变量。默认构造函数(空parens)构造一个end-of-stream迭代器。