【发布时间】:2019-02-09 21:11:27
【问题描述】:
#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
【问题讨论】:
-
请修正您的代码。它在那里有一些意外的插入。同时更正缩进。
-
str = realloc(str, strlen(str)+1);这里的目的是什么?这很没有意义。 -
程序应该做什么?请显示输入和预期输出的示例。
-
为什么条件仍然成立?你的输入是什么?仅当输入以
'j'开头时才会如此 -
@EugeneSh。输入可以是任何字符或任何数字。如果在任何 j(比如 j=5)*str 等于 j(在这种情况下为 5),我打算更新 a[j](或 a[5])。