频率数字计数



我试图找到给定字符串中数字的频率,其中包含数字和字母。当我运行相同的程序时,我得到不同的结果,看起来像随机输出。问题出在哪里?

int main() {              
char num[1001];
int digit[10];
int j,i;
int count;
scanf("%s",num);
for(i=48;i<=57;i++)
{ 
count = 0;
for(j=0; num[j] != EOF;j++)
{
if(num[j] == i)
{
count++;
}
}
printf("%d ",count);
}
return 0;
}

您在num之前错过了与scanf行中的&。正确的代码应该是:

scanf("%s", &num);

扫描值时,需要提供变量的地址。也就是说,你让你的程序知道在哪里放置值。&num指向变量num的地址。但是,如果您只是编写scanf("%s",num)则您正在提供num变量的值,而您根本不在乎。无论如何,您都会覆盖该值。


在字符串的末尾,计算机放置一个 ASCII 值为 0 的空字符,以表示这是字符串的末尾。有点像".",但对于计算机。因此,您检查直到在 for 循环中找到空字符,例如:num[j] != ''[不是 EOF]

我在这里没有看到任何问题,似乎输出无法正确读取 所以尝试正确打印,例如

printf("%c=>%d ",i, count);

这样您就可以读取多少次数字。 如果你发现错误的频率, 发布您获得错误输出的输入。

您似乎正在尝试将 char 元素与整数类型进行比较。 例如:

char num[7] = {"ABC123");
if (num[3] == 1)
{
printf("Truen");
}
else
{
printf("Falsen");
}
return 0;
// This will return False, even though the element at index 3 is "1".

我已经运行了您的代码,并且在给定相同的输入的情况下,输出似乎是相同的。

编辑:

我们想将两位数字与 char 数据类型(本质上是一个字符(进行比较,即一位数字/大小写。

当我们取一个数字N并取模 10 时,我们得到最后一个数字,例如:

48 % 10 = 8

为了得到第一个数字,我们只需除以 10,然后取商,例如:

48 / 10 = 4 (remainder 8).

有了这些知识,我们可以将n-th字符与第一个数字进行比较,将n+1-th字符与最后一个数字进行比较(鉴于我们只比较两位数,我们将停在n+1-th个字符(。

提示:可以使用char = char - '0'将数字字符转换为 int

char num[1001];
int digit[10];
int j,i;
int count;
scanf("%s",num);
for(i=48;i<=57;i++)
{ 
count = 0;
for(j=0; num[j] != EOF;j++)
{
if(num[j] - '0' == i / 10 && num[j+1] - '0' == i % 10)
{
printf("%c", num[j] - '0');
count++;
}
}
printf("%d: %d n",i, count);
}
printf("n"); 
return 0;
// This code will print the digits and the frequency in a new line:
48: n times
49: n times
.
.
.
57: n times

最新更新