这是 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/