数组中元素的计数

标签 c arrays

这是 hackerearth 上最简单的问题之一,这里是问题陈述:

You are given a string S. Count the number of occurrences of all the digits in the string S.

但我不明白为什么我的解决方案不起作用,我猜输入数组有问题,请帮我解决。 (我想要使用数组的解决方案)。

int i, j;
int digit[10] = {0,1,2,3,4,5,6,7,8,9};
int presence[10] = {0};
int inp[80];
scanf("%s", inp);
for(i = 0; i < strlen(inp); i++) {
    for(j = 0; j < 10; j++) {
       if(inp[i] == digit[j]) {
           presence[j]++;
       }
    }
}
for(i = 0; i < 10; i++) {
    printf("%d\t%d\n",digit[i],presence[i]);
}

最佳答案

第一个问题是通过定义

int inp[80];

scanf 将数据正确存储在内存中(可能会出现编译器的警告),但 inp[i] 是由多个字符组成的整数(虚假结果整数数据上的映射字符)。您必须将字符串存储在 char 中:

char inp[80];

第二个问题是比较数字的字符代码与实际数字不匹配。尝试减去'0'的ascii码:

if(inp[i]-'0' == digit[j]){

这也可以在没有 digit 表的情况下实现,或者使用任何字符串大小并且无需双循环,通过直接从 ASCII 代码推导数字来实现:

for(i = 0; i < strlen(inp); i++) {
    if ((inp[i]>='0') && (inp[i]<='9') { 
           presence[inp[i]-'0']++;
    }
}

关于数组中元素的计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45834548/

相关文章:

c - 从函数返回一个无空格的字符串

arrays - 具有复杂步长的 numpy 数组切片是什么意思?

arrays - 使用 Powershell,如何计算数组中每个元素的出现次数?

javascript - 对内部有两个对象的数组进行排序

javascript - 如何处理动态数组?

CRC位序困惑

c - malloc 和 ptr = (int*) malloc(100 * sizeof(int))

c - 进程以状态 3 终止 - 代码块

困惑为什么代码不能正确运行

javascript - 数组操作/映射返回未定义