将字符串与二维数组进行比较
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
中,如果是你拒绝它,如果不是你添加它。
j
是 cnic2
中下一个元素的索引,应该在主循环之前明确设置为 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。
我不会为您解决这些问题,因为您的代码可以做更多的事情。我指出的答案显然是错误的。
实际上我正在尝试将字符串与 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
中,如果是你拒绝它,如果不是你添加它。 j
是cnic2
中下一个元素的索引,应该在主循环之前明确设置为 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。
我不会为您解决这些问题,因为您的代码可以做更多的事情。我指出的答案显然是错误的。