gpt4 book ai didi

将字符串 strcmp() 函数与字符串的 2d 指针进行比较?

转载 作者:太空宇宙 更新时间:2023-11-04 08:08:34 25 4
gpt4 key购买 nike

我正在做下面的代码练习

int main() {


int N, Q, cnt;
scanf("%d", &N);
char **str1=(char**)malloc(sizeof(char*)*N);
for(int i=0; i<N; i++) {
str1[i]=(char*)malloc(sizeof(char)*20);
scanf("%[^\n]s", str1[i]);
}
scanf("%d", &Q);
char **str2=(char**)malloc(sizeof(char*)*Q);
for(int i=0; i<Q; i++) {
str2[i]=(char*)malloc(sizeof(char)*20);
scanf("%[^\n]s", str2[i]);
}

for(int i=0; i<Q; i++) {
for(int j=0, cnt=0; j<N; j++) {
// if statement
if( strcmp(str2[i], str1[j]) == 0) cnt++;
}
printf("%d\n", cnt);
}


for(int i=0; i<N; i++){
free(str1[i]);
}
for(int i=0; i<Q; i++) {
free(str2[i]);
}
free(str1);
free(str2);
return 0;
}

STD输入是

4
aaa
bbb
ccc
aaa
3
aaa
bbb
cca

打印出来

2
1
0

因为

  • 'aaa' 是 2 次
  • 'bbb' 是 1 次
  • 'cca' 是 0 次

 if( strcmp(str2[i], str1[j]) == 0) cnt++;

但是 if 语句不算 cnt++

怎么了,我的代码有 strcmp() ?

最佳答案

您有两个名为 cnt 的变量。

在这一行声明:

int N, Q, cnt;

并且作用域为整个函数。

在这一行声明:

for(int j=0, cnt=0; j<N; j++) {

并限制在 for 循环中。

语句 cnt++ 修改第二个,因为它在 for 循环内。

语句 printf("%d\n", cnt); 打印第一个,因为它在 for 循环之外。

关于将字符串 strcmp() 函数与字符串的 2d 指针进行比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41035559/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com