在C ++中比较2-D char数组

时间:2014-09-11 10:12:49

标签: c++

using namespace std;
#include<iostream>

int main()
{
    int n,i,j;
    int b[10];
    char a[50][50];

    cout<<"Dictionary\n";
    cout<<"Enter the no. of enteries you want to enter:";
    cin>>n;

    // Function 1 & 2 : To add keys and values
    for(i=0;i<n;i++)
    {
        cout<<"Enter the name:";
        cin>>a[i];

        for(j=0;j<i;)
        {
            if(a[j]==a[i])
            {
                cout<<"no";
                cin>>a[i];
            }
            else
            {
                j++;
            }
        }

        cout<<"Enter the marks:";
        cin>>b[i];
    }
    return 0;
}

如果我们输入2个条目...同名...那么为什么它不会进入if(a[i]==a[j]) ??? 就像a [i] =&#39; rohan&#39; amd a [j] =&#39; rohan&#39;它也不会相等....初始化我只能使用char

2 个答案:

答案 0 :(得分:3)

数组类型对象是C ++中的二等公民。例如,将两个数组与==进行比较将不会比较数组对象本身。相反,它会将指针与每个数组的第一个元素进行比较。这样,如果两个数组是相同的数组对象,那么它们只会与==进行比较(因为它们的第一个元素具有相同的地址)。

如果要比较C风格的字符串(即char的以空字符结尾的数组),则需要使用strcmp

但是,我建议您使用std::string作为字符串。它们更容易处理 - 它们允许与==(以及许多其他有用的函数)进行比较,并且不希望您对字符串设置任意50个字符的限制。

答案 1 :(得分:1)

您无法比较像这样的字符数组。该比较运算符实质上是比较两个不同的数组的地址。

为什么不使用memcmp(或memicmp - 用于不区分大小写)或甚至更好地使用std :: string?