#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
答案 0 :(得分:0)
str = realloc(str, strlen(str)+1);
步骤毫无意义。您可以删除此行。j
进行比较毫无意义。由于要计算数字,因此应该改为'0' + j
。str
与str++
一起使用。这样,您仍然可以使用原始的str[i]
指针,以防例如要将其传递到str
或printf
中。对于内循环,请尝试以下操作:
strlen
答案 1 :(得分:0)
我想也许您想要的是for ( int j = 0; j <= 9; j++ )
{
if(str[i] == ('0' + j)) a[j]++;
}
换句话说,如果j为零,则检查'0'字符;否则,为0。如果j为1,则检查是否为“ 1”,依此类推