C++读取两个文本文件字符串并实现匹配对比的问题求助
C++读取两个文本文件字符串并实现匹配对比的问题求助
大家好,我刚接触C++,现在遇到一个文件字符串匹配的问题,想请教下各位:
我有两个文本文件,每个里面有几百个字符串——主名单文件有480条,对比文件有303条。我的需求是:把主名单里的每个字符串和对比文件里的所有字符串逐一对比:
- 如果找到匹配项,就把这个字符串输出到
eligible文件里 - 如果遍历完对比文件所有内容都没找到匹配,就输出到
ineligible文件里
同时我还加了计数器,想确保最终匹配数是303,不匹配数是177,和两个文件的数量差对应上。
我尝试过的方法和遇到的坑
一开始我用了简单的while循环,读主文件的每一行然后去对比,但发现根本匹配不全,想想确实逻辑太简单了,于是改成把两个文件的内容都读到数组里,再逐个对比。
我成功把两个文件的内容读到数组里并且能正常打印,但现在遇到两个大问题:
- 段错误(Segmentation Fault):我怀疑是用
sizeof()的时候出问题了,代码里用sizeof(arrMidasMaster)来控制循环次数,是不是这里的用法完全错了? - 匹配逻辑的漏洞:我写的嵌套循环里,现在只有找到匹配时会写入文件并计数,但如果主名单里的某个字符串和对比文件里所有项都不匹配,我不知道该把写入不匹配文件的代码放在哪里——现在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
相关产品推荐
相关产品推荐

