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

C++数组对比异常:查找array2缺失元素却重复输出公共元素

问题出在哪

你写的嵌套循环逻辑有问题:只要array1里的元素和array2中某一个元素不匹配,就立刻输出该元素,而不是等遍历完array2所有元素、确认完全找不到匹配时才判定为缺失。比如拿"aaa"来说,它和array2里的"bbb""ccc"对比时都会触发else分支,所以会重复打印好几次共有元素。

修正后的代码

给每个array1的元素加个存在标记,等内层循环跑完再判断是否输出:

#include <iostream>
#include <string>
using namespace std;

int main() {
    string array1[] = { "aaa","bbb","ccc","ddd" };
    string array2[] = { "aaa","bbb","ccc" };
    // 用sizeof计算数组长度,避免硬编码数字出错
    int len1 = sizeof(array1) / sizeof(array1[0]);
    int len2 = sizeof(array2) / sizeof(array2[0]);

    for (int i = 0; i < len1; i++) {
        bool is_found = false;
        for (int j = 0; j < len2; j++) {
            if (array1[i] == array2[j]) {
                is_found = true;
                break; // 找到匹配就不用继续对比了
            }
        }
        // 只有全程没找到匹配才输出
        if (!is_found) {
            cout << array1[i] << endl;
        }
    }
    return 0;
}
更高效的写法(可选)

如果数组元素很多,嵌套循环的效率会很低,用哈希集合可以把查找速度提上来:

#include <iostream>
#include <string>
#include <unordered_set>
using namespace std;

int main() {
    string array1[] = { "aaa","bbb","ccc","ddd" };
    string array2[] = { "aaa","bbb","ccc" };
    int len1 = sizeof(array1) / sizeof(array1[0]);
    int len2 = sizeof(array2) / sizeof(array2[0]);

    // 把array2的元素都放进哈希集合
    unordered_set<string> arr2_set(array2, array2 + len2);

    for (int i = 0; i < len1; i++) {
        // 检查集合里有没有当前元素,没有就输出
        if (arr2_set.find(array1[i]) == arr2_set.end()) {
            cout << array1[i] << endl;
        }
    }
    return 0;
}

内容的提问来源于stack exchange,提问作者anon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 12:01:45