我目前有一个文本文件如下:
12 6 4 9
这是一个非常简单的文本文件,因为我想让一行工作,然后可能会扩展到多行。额外的一边:这是我正在研究的RPN计算器。
我想逐个字符地浏览这个文本文件。我目前实现它的方式是使用简单的while循环:
string line;
while (!infile.eof()){
getline(infile, line);
if (isdigit(line[0])){
rpn_stack.push_back(atof(line.c_str()));
}
}
rpn_stack是一个向量,因为我不会在C ++中使用内置的堆栈库。 我目前遇到的问题是输出只是输出" 12"。这是为什么?
有没有一种方法可以逐个字符遍历文件而不是作为一行读取?它是否破裂,因为它找到了一个空白区域(会被认为是EOF)?
编辑:
代码已被重写为如下:
string line;
while (!infile.eof()){
getline(infile, line);
for (int i = 0; i < line.size(); i++){
if (isdigit(line[i])){
rpn_stack.push_back(atof(line.c_str()));
}
}
}
输出是12 5次不同的时间,这显然是错误的。 txt文档中不仅有4个项目,而且其中只有一个是12个。有人可以提供一些见解吗?
答案 0 :(得分:1)
这将尽可能多地从double
读取infile
次(即直到文件结尾或直到它遇到不是double
的标记),分开通过空白。
for (double d; infile >> d;)
rpn_stack.push_back(d);
如果你需要逐行解析,正如@ooga所说,你需要一个看起来像这样的两阶段阅读器:
for (std::string line; getline(infile, line);) {
std::istringstream stream{line};
for (double d; stream >> d;)
rpn_stack.push_back(d);
}
奖金提示:请勿使用.eof()