将字符串与2d数组进行比较

时间:2015-01-15 14:28:30

标签: c++ arrays c-strings turbo-c++

实际上我正在尝试将字符串与2d数组进行比较。如果输入的字符串已经存在于数组中,程序应该终止。如果字符串不存在则应该存储在下一行数组中。 这段代码正在做的是它没有告诉输入的" 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++;**

2 个答案:

答案 0 :(得分:0)

我使用的是Turbo C(甚至不是++),但很久很久以前......更严重的是,我认为:

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

宣言:

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

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

测试循环(包括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);

答案 1 :(得分:0)

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

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。

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