【问题标题】:compare string strcmp() function with 2d pointer of string?将字符串 strcmp() 函数与字符串的二维指针进行比较?
【发布时间】:2016-12-08 09:07:58
【问题描述】:

我正在练习下面的代码

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;
}

性病输入是

4
aaa
bbb
ccc
aaa
3
aaa
bbb
cca

比打印出来

2
1
0

因为

  • 'aaa' 是 2 次​​li>
  • 'bbb' 是 1 次
  • 'cca' 是 0 次

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

然而 if 语句,不算cnt++

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

【问题讨论】:

标签: c string 2d strcmp


【解决方案1】:

你有两个变量叫做cnt

在这一行声明的一个:

int N, Q, cnt;

并作用于整个函数。

在这一行声明的一个:

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

范围为for 循环。

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

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

【讨论】:

  • 没有两个变量,cnt。我百分百确定。你能再检查一下吗?
  • @alexparkjw 有两个变量,cnt。我有 150% 的把握,你能再检查一下吗?
  • 因为我检查了,并且我更改了 if 代码,例如 if( strcmp(str2[i], str1[j]) == 0) printf("123\n");但永远不要打印出 123
  • int j=0, cnt=0 声明了两个变量 jcnt 并初始化它们。它不会删除和初始化j,然后将现有变量cnt 设置为零。这称为变量阴影,如果您指示编译器这样做,编译器会警告您。
  • @不管 cnt 是二还是树。 ~ for(int i=0; i
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-20
  • 1970-01-01
  • 1970-01-01
  • 2022-11-03
  • 2014-11-06
  • 1970-01-01
相关资源
最近更新 更多