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
相关产品推荐
相关产品推荐

