将字符串与二维数组进行比较

Comparing a String with 2d Array

实际上我正在尝试将字符串与 2d 进行比较 array.If 输入的字符串已经存在于数组中程序应该 terminate.If 字符串不存在然后它应该存储在数组的下一行。 这段代码正在做的是它没有告诉输入的 "cnic" 之前是否已经输入过。我正在使用 Turbo C++ 3.0 编译器,所以请记住这一点。

这个程序实际获取用户的cnic并检查之前是否输入过cnic。

这是我的程序

          cout<<"\nEnter Your CNIC?\n";
        gets(cnic);
        **for (i=0;i<=13;i++)
        {
            if (strcmp(cnic,cnic2)==0)
            {
                cout<<"This Cnic has already casted the vote";
            }
        }
        cnic2[i][j]=cnic[i];
        j++;**

我使用的是 Turbo C(甚至不是 ++),但那是很久以前的事了……更严重的是,我假设:

  • cnic 是一个大小为 13 的字符数组(12 + 终止空值)
  • cnic2 应该是一个由 100 个 char 数组组成的 2D 数组,大小为 13(这不是你代码中写的)
  • 你想看看 cnic C 字符串是否已经在 cnic2 中,如果是你拒绝它,如果不是你添加它。
  • jcnic2 中下一个元素的索引,应该在主循环之前明确设置为 0。

声明:

char cnic2[100][13];
int found; /* should be bool found but unsure if Turbo C++ knows about that */

(您的代码声明了一个大小为 100 的 13 C-Ctring 数组)

测试循环(包括 OP 审查和测试的代码):

/* should control size of nic before that processing - I ASSUME IT HAS BEEN DONE */
found = 0;  /* should be found = false; and later use false and true instead of 0 and 1 */
for(i=0; i<j; i++) {
    if (0 == strcmp(cnic, cnic2[i]) {
        found = 1;
        break;
    }
}
if (found) {
    cout<<"This Cnic has already casted the vote";
    continue;
}
if (j == 99) {
    count << "Too much Cnic already";
    break;  
}
strcpy(cnic2[j++], cnic);


/* Revised and Working Code

found = 0;  /* should be found = false; and later use false and true instead of 0 and 1 */

for(i=0; i<j; i++) {

    if (0 == strcmp(cnic, cnic2[i]))
    {
        found = 1;  
        break;
    }

}
if (found) {
    cout<<"This Cnic has already casted the vote";
    continue;  
}
if (j == 99) {
    cout << "Too much Cnic already";
    break;   
}
strcpy(cnic2[j++], cnic);

专注于您用 ** 标记的代码。错误编号如下:

for (i=0;i<=13;i++) // (1)
{
    if (strcmp(cnic,cnic2)==0)  // (2)
    {
        cout<<"This Cnic has already casted the vote";
    }
}
cnic2[i][j]=cnic[i]; // (3)

错误(1),您循环次数过多。你想从 0 循环到 12,或者使用 < 13,而不是 <= 13

对于错误(2)strcmp()的第二个参数是错误的。您想要比较从 cnic2[j].

开始的字符串

对于错误 (3),您访问的元素超出了两个数组的范围,因为 i 将是 13。

我不会为您解决这些问题,因为您的代码可以做更多的事情。我指出的答案显然是错误的。