【问题标题】:How to compare two files in C++?如何在 C++ 中比较两个文件?
【发布时间】:2020-12-19 10:43:11
【问题描述】:

我需要在 C++ 中比较两个文件,并为找到的每个“相等”增加一个计数器的值。

我的代码:

ifstream flux("C:\\Users\\Matthieu\\Desktop\\test.txt",ios::in);
char ligne[100];

ifstream flux2("base_fonctions.txt", ios::in);
char ligne2[100];

while (flux.getline(ligne, 100)) {

    bool found = false;

    while (flux2.getline(ligne2, 100)) {

        if (ligne == ligne2) {

            found = true;
            count = count + 0.5;

        }
    }
    if (found==false) {

        count = count;
    }
}

return count;

我想将test.txt 文件的第 1 行与 base_functions.txt 文件的所有行进行比较,将测试文件的第 2 行与第二个文件的所有行进行比较,等等。
目前,当两个文件之间确实存在相等时,我的函数会不断返回零?

【问题讨论】:

  • ligne == ligne2 比较不同的指针,例如使用 strcmp
  • 提示:这是 C++。使用std::string
  • 请注意,当第一次退出嵌套的 while 时,您会到达文件的 flux2 结尾,并且永远不会从第一个 的第二轮重新进入它i>而,你没有倒带。为什么将行长度限制为 100 ?如前所述,使用 std::string 而不是 C string
  • 这段代码基本上说“100 字节对于任何一行都应该足够”,这是一个疯狂的假设,它可能会证明自己是非常错误的。
  • 将所有行从第二个文件加载到std::unordered_set<std::string>,然后遍历第一个文件中的行并计算集合中的匹配数。就这些。它应该少于 20 行代码。

标签: c++ file compare


【解决方案1】:

您的比较不起作用,因为它不是比较行,而是比较数组指针,在这种情况下它们永远不会相等。你的计数不应该是 0,但我想它是一个整数,它正在向它添加 0。

要比较两条线,您可以使用<cstring> 中的strcmp

此外,这种归因没有必要,因为它没有任何作用。

if (found==false) {

    count = count;
}

【讨论】:

  • 感谢您的回答我已经稍微修改了代码如下所示:
  • ifstream 通量("C:\\Users\\Matthieu\\Desktop\\test.txt",ios::in);炭黑[100]; ifstreamflux2("base_fonctions.txt", ios::in); char ligne2[100]; while (flux.getline(ligne, 100)) { while (flux2.getline(ligne2, 100)) { if (strcmp(ligne, ligne2)==0) { count++; } } } 返回计数;
  • 我已经看到 strcmp() 在我的两个字符串相等时返回 0,但它还不起作用,我猜我一定犯了一个错误
猜你喜欢
  • 2018-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多