从字符数组扫描整数

时间:2018-09-04 19:41:04

标签: c arrays

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>

int main() {

    int a[10];
    for (int i=0 ; i<10;i++){
        a[i]=0;
    }

    char *str = (char *)malloc(1024*sizeof(char));
    scanf("%s",str);
    str = realloc(str, strlen(str)+1);

    for (int i = 0;i<strlen(str);i++){

        for ( int j = 0;j<=9;j++){
            if(*str=='j') a[j]++;
        }

        str++;
    }
    for (int i=0 ; i<10;i++){
        printf("%d ",a[i]);
    }
    return 0;
}

在这段代码中,if(*str=='j') a[j]++;的条件*str == j始终返回false,因此a[j]的值完全没有变化。

为什么会这样,我该怎么解决?

该代码应该扫描给定数组中的整数,并给出出现数字的频率。

示例输入:a11472o5t6

输出:0 2 1 0 1 1 1 1 0 0

2 个答案:

答案 0 :(得分:0)

  • str = realloc(str, strlen(str)+1);步骤毫无意义。您可以删除此行。
  • j进行比较毫无意义。由于要计算数字,因此应该改为'0' + j
  • 我建议不要将strstr++一起使用。这样,您仍然可以使用原始的str[i]指针,以防例如要将其传递到strprintf中。

对于内循环,请尝试以下操作:

strlen

答案 1 :(得分:0)

我想也许您想要的是for ( int j = 0; j <= 9; j++ ) { if(str[i] == ('0' + j)) a[j]++; }

换句话说,如果j为零,则检查'0'字符;否则,为0。如果j为1,则检查是否为“ 1”,依此类推