C++ 比较字符串与二维数组

C++ 比较字符串与二维数组,c++,arrays,c-strings,turbo-c++,C++,Arrays,C Strings,Turbo C++,实际上,我正在尝试将字符串与2d数组进行比较。如果输入的字符串已存在于数组中,则程序应终止。如果字符串不存在,则应将其存储在数组的下一行。 这段代码所做的是,它不能说明输入的cnic之前是否已输入。我使用的是Turbo C++ 3编译器,请记住这一点。 该程序实际上会获取用户的cnic,并检查该cnic之前是否已输入 这是我的节目 我用的是Turbo C,甚至不是+,但那是很久以前的事了。。。更严重的是,我认为: cnic是一个大小为13 12+终止null的字符数组 cnic2应该是一个大小为

实际上,我正在尝试将字符串与2d数组进行比较。如果输入的字符串已存在于数组中,则程序应终止。如果字符串不存在,则应将其存储在数组的下一行。 这段代码所做的是,它不能说明输入的cnic之前是否已输入。我使用的是Turbo C++ 3编译器,请记住这一点。 该程序实际上会获取用户的cnic,并检查该cnic之前是否已输入

这是我的节目


我用的是Turbo C,甚至不是+,但那是很久以前的事了。。。更严重的是,我认为:

cnic是一个大小为13 12+终止null的字符数组 cnic2应该是一个大小为13的100个字符数组的2D数组。它不是您的代码中所写的 您想要查看cnic C-string是否已经在cnic2中,如果是,您将拒绝它,如果不是,您将添加它。 j是cnic2中下一个元素的索引,在主循环之前应明确设置为0。 声明:

char cnic2[100][13];
int found; /* should be bool found but unsure if Turbo C++ knows about that */
您的代码声明了一个由13个大小为100的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,而不是我使用Turbo C++ 3编译器…哦,不……该死,编译器比我老……学习Turbo C++支持的C++版本是一种浪费。@克拉什姆斯特尔:我想知道印度火箭科学家使用的是什么……信不信由你,你可能会面临一些非常古老的代码,你已经把你的屁股砸了,这是对一些人的答案。以上评论。我不知道图尔博C++ 3是怎么回事,但是从我看到的,这里更多的是C代码,这里涉及到字符串。strcmp绝对是一条出路。您只需按行遍历数组并将其与字符串进行比较。我建议在这里使用指针。谢谢你的回复,cnic[100][13]我的意思是13列和100行,顺便说一句。谢谢你,我对代码做了一些更改,现在它工作正常。谢谢你的回复,我已经编辑了我的代码,但当我重新输入我之前编写的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)