【问题标题】:writing information on the end of each line of a file in c++ [closed]在c ++中在文件的每一行末尾写入信息[关闭]
【发布时间】:2019-01-31 23:21:07
【问题描述】:

我想编写一个从文件中读取后缀表达式的程序, 每个后缀表达式都在一行上, 然后程序计算后置表达式,然后将结果写到每一行的旁边。

它是这样的:

文件信息:

1 2 +

9 3 * 

修复后评估后: 文件看起来像这样:

1 2 +  3

9 3 *  27

其中附加数字是修复后评估的结果。 我完成了修复后评估,但似乎不知道如何将它们写到每一行的末尾。

有人知道我如何实现这一目标吗?

【问题讨论】:

  • 我不知道您是如何“无法实现这一目标”的。但我知道如何做到这一点:打开你的 C++ 书籍并查找 std::ifstream,或者在 Google 中输入 std::ifstream 并学习。也许这会对你有所帮助:std::ifstream.
  • 我认为 OP 可能面临的问题是将结果写入文件中间。如果是这样,那是不可能的。也许这个答案可以帮助你。 stackoverflow.com/questions/30642827/…
  • 如果我们不知道你在做什么,很难说你做错了什么,所以我强烈建议添加一个 minimal reproducible example 来涵盖你的输出写作。
  • 刚刚编辑了这个问题,如果你能看到我想要达到的目标,我将不胜感激

标签: c++ fstream ofstream file-processing


【解决方案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...

【讨论】:

    【解决方案2】:

    我假设您的代码中没有括号,所有数字都是正整数,由运算符或空格分隔。

    使用堆栈数据结构。 (如果你不知道那是什么,它是一种数据结构,有两个操作分别称为 pop 和 push,如果你以前从未听说过它,你应该阅读它)。

    每当您阅读一个数字时,请继续阅读,直到找到一个非数字。你现在读到的所有数字组成一个整数。将该整数压入堆栈。

    重复直到你读到一个运算符(+、-、*、/)

    一旦读取了一个运算符,将该运算符应用于堆栈中的最后两个值并将结果压入堆栈。

    这就是编译器内部的数学运算方式。

    完成一行后,检查堆栈中是否只有一个值。如果没有,则表示指令中的整数和运算符数量不匹配。如果只有一个数字,则将其写入文件。

    编辑:最好为输出创建一个新文件(如有必要,最后将其重命名为输入文件的名称)

    然后从输入文件中读取每一行并将其和结果粘贴到输出文件中。

    【讨论】:

    • 感谢您的解释,但我的问题实际上在于我希望将信息显示到文件的方式,而不是修复后评估本身
    • @T.Matar 我已经更新了我的答案。
    • 这个答案中唯一甚至可以远程解决所问问题的是最后两句话。从输入文件中读取一行,根据需要对其进行处理,将其及其结果写入另一个输出文件,然后重复直到不再读取行。其余的无关紧要,应该删除。
    猜你喜欢
    • 2014-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-26
    • 1970-01-01
    • 1970-01-01
    • 2020-11-17
    • 1970-01-01
    相关资源
    最近更新 更多