C++ 数组元素比较

Posted

技术标签:

【中文标题】C++ 数组元素比较【英文标题】:C++ array elements comparison 【发布时间】:2018-01-31 21:16:52 【问题描述】:

我想在两个arrays进行比较,我是这样尝试的:

#include <iostream> 

using namespace std; 

int main() 
int v1[10] = 1, 5, 77, 3, 4, 0, 2, 6, 8, 9; 
int v2[10] = 20, 18, 2, 3, 4, 0, 1, 9, 6, 8; 
int i,l,c=0,n=0; 

//comparision
for(i=0; i<10; i++) 
 
    for(l=0;l<10;l++) 
     
        if ((v1[i] == v2[l]) && (c==0)) 
         
            cout << v1[i] << " e " << v2[l] << " are common" << endl; 
            c = 1; 
         
        else if((n==0) && (l==10)) 
         
            cout << v1[i] << " it s in only one array" << endl; 
            n = 1; 
        ;
     
    c=0,n=0; 
 

system("pause"); 
return 0; 

但它似乎不适用于不常见的元素,程序只显示常见的元素而不显示不常见的元素。我不明白为什么。 有人可以帮助我吗?

提前感谢您的帮助。

【问题讨论】:

请提供更多细节,以便任何人都可以提供帮助。 1) 更详细地解释 2) 在发布之前使用调试器,这样您就可以看到您的逻辑正在运行,并且大多数时候您会看到问题。缩进。这段代码很糟糕,因此很难理解。 3) 缩进你的代码以便于理解。 @PaulB 我在其中编辑了缩进。 【参考方案1】:

您的l 永远不能为10,这是显示唯一元素的条件。循环将在 9 点停止。

我建议您只使用一个变量来标记唯一性。例如:

bool found = false;
for(i = 0; i < 10; i++) 
 
    for(l = 0; l < 10; l++) 
     
        if ((v1[i] == v2[l])) 
         
            cout << v1[i] << " e " << v2[l] << " are common" << endl; 
            found = true; 
         
        else if(!found && l==9) 
         
            cout << v1[i] << " it s in only one array" << endl; 
        
     
    found = false; 

此外,如果想稍微更改代码,则只能在内循环之后进行检查:

for(int i = 0; i < 10; i++)
    bool found = false;
    for(int j = 0; j < 10; j++) 
        if ((v1[i] == v2[j])) 
            cout << v1[i] << " e " << v2[j] << " are common" << endl; 
            found = true; 
        
    
    if(!found)
        cout << v1[i] << " is in only one array" << endl; 
    

【讨论】:

我建议将bool found = false;放在第一个循环体的开头,这样你就不需要在底部重复了。 @Barmar 这是真的!相应地进行了编辑。 非常感谢@Felix,我用 l = 9 尝试了你的解决方案,但我不明白,或者我无法解释它,如果我想在 2 中找到找到的元素数组直到 10 个周期,为什么 l = 9?也许我在我的 for 循环开始时错了,我必须使用 i @Amiga500 C++ 中的数组从零开始。所以第十个元素是索引 9 处的元素。如果找到相似的元素,我们将标志“found”设置为真。所以我们知道如果'found' 在每个元素之后仍然为假,则一定没有匹配。这有帮助吗?成功了吗? @Felix 没关系,就在我在程序结束时获得的第一个解决方案中,我获得“92 仅在一个数组中”,但我曾经在我的数组中放入了数字 92,所以哪里有问题?你和我一样吗?提前谢谢你

以上是关于C++ 数组元素比较的主要内容,如果未能解决你的问题,请参考以下文章

记录一个比较少用的容器C++ std::bitset

C++ 数组array与vector的比较

是否可以将数组元素与没有循环的硬编码初始化列表进行比较? [关闭]

如何计算快速排序期间发生的数组比较次数?

比较对象数组,最佳方式

比较 C++ 中 char 数组的值