我想编写一个从文件读取后缀表达式的程序, 每个后缀表达式在一行上, 然后程序计算后缀表达式,然后将结果写在每一行旁边。
它是这样的:
文件信息:
1 2 +
9 3 *
修复后评估后的: 文件看起来像这样:
1 2 + 3
9 3 * 27
其中,附加数字是修复后评估的结果。 我完成了修复后评估,但似乎不知道如何将它们写到每一行的末尾。
任何人都知道我如何实现这一目标?
答案 0 :(得分:1)
使用std:ifstream
打开输入文件,并使用std::ofstream
打开单独的输出文件。然后在循环中使用std::getline()
从输入文件中读取行,处理每一行并将其连同结果一起写入std::ofstream
。循环完成后,您可以关闭流,并在需要时将输入文件替换为输出文件。
#include <fstream>
#include <string>
std::ifstream in("input.txt");
std::ifstream out("output.txt");
std::string line;
while (std::getline(in, line))
{
if (!line.empty())
{
out << line;
// process line as needed...
out << " " << result;
}
out << "\n";
}
in.close();
out.close();
// replace input.txt with output.txt, if needed...
答案 1 :(得分:0)
我假设您的代码中没有方括号,并且所有数字都是正整数,由运算符或空格分隔。
使用堆栈数据结构。 (如果您不知道这是什么,它是一个数据结构,它具有两个名为pop和push的操作,如果您以前从未听说过,则应仔细阅读。)
每当阅读数字时,请继续阅读直到找到非数字。您现在读取的所有数字都组成一个整数。将该整数压入堆栈。
重复此操作,直到您读取运算符(+,-,*,/)
一旦您读取了一个运算符,就将该运算符应用于堆栈上的最后两个值,并将结果压入堆栈。
这是在编译器内部进行数学运算的方式。
完成一行后,检查堆栈上是否只有一个值。如果没有,则意味着指令中存在不匹配数量的整数和运算符。如果只有一个数字,请将其写入文件。
编辑:最好为输出创建一个新文件(并在必要时将其重命名为输入文件的名称)
然后从输入文件中读取每一行并将其粘贴并将结果粘贴到输出文件中。