【发布时间】: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 行代码。