You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++读取两个文本文件字符串并实现匹配对比的问题求助

C++读取两个文本文件字符串并实现匹配对比的问题求助

大家好,我刚接触C++,现在遇到一个文件字符串匹配的问题,想请教下各位:

我有两个文本文件,每个里面有几百个字符串——主名单文件有480条,对比文件有303条。我的需求是:把主名单里的每个字符串和对比文件里的所有字符串逐一对比:

  • 如果找到匹配项,就把这个字符串输出到eligible文件里
  • 如果遍历完对比文件所有内容都没找到匹配,就输出到ineligible文件里
    同时我还加了计数器,想确保最终匹配数是303,不匹配数是177,和两个文件的数量差对应上。

我尝试过的方法和遇到的坑

一开始我用了简单的while循环,读主文件的每一行然后去对比,但发现根本匹配不全,想想确实逻辑太简单了,于是改成把两个文件的内容都读到数组里,再逐个对比。

我成功把两个文件的内容读到数组里并且能正常打印,但现在遇到两个大问题:

  1. 段错误(Segmentation Fault):我怀疑是用sizeof()的时候出问题了,代码里用sizeof(arrMidasMaster)来控制循环次数,是不是这里的用法完全错了?
  2. 匹配逻辑的漏洞:我写的嵌套循环里,现在只有找到匹配时会写入文件并计数,但如果主名单里的某个字符串和对比文件里所有项都不匹配,我不知道该把写入不匹配文件的代码放在哪里——现在else里用了continue,但如果整个内层循环都没找到匹配,就应该触发不匹配的逻辑,这点我完全搞不定。

我的代码片段

下面是我写的数组对比部分的代码,麻烦帮我看看问题出在哪:

// 我一开始直接定了固定大小的数组,因为知道文件里的行数
string arrMidasMaster[480];
string arrMidasMath[303];

// 先把两个文件的内容分别读到这两个数组里(这部分是能正常工作的)

// 然后做嵌套循环对比
for (int i = 0; i < sizeof(arrMidasMaster); ++i)
{
    for (int j = 0; j < sizeof(arrMidasMath); ++j)
    {
        if (arrMidasMaster[i] == arrMidasMath[j]) // 找到匹配
        {
            outData_Elig << arrMidasMaster[i] << endl;
            num_eligible ++; // 匹配计数器
        }
        else // 没找到当前项的匹配,继续下一个对比项
        {
            continue;
            // 这里的问题:如果整个内层循环都没找到匹配,怎么执行下面这两行?
            // outData_Ineli << arrMidasMaster[i] << endl;
            // num_ineligible ++; // 不匹配计数器
        }
    }
}

现在我感觉这个思路方向是对的,但细节上卡壳了,尤其是sizeof()的用法和不匹配逻辑的触发时机,希望各位能给我指指路,谢谢!

备注:内容来源于stack exchange,提问作者Matthew Maisonave

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 10:13:11