我猜将字符串与整数进行比较时出现问题

problem in comparing string to a integer i guess

此代码无效,数字 0 到 9 在给定字符串中重复了多少次。

这道题,来自hackerrank:

Given a string, S, consisting of alphabets and digits, find the frequency of each digit in the given string.

我在逻辑上找不到任何错误。

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>

int main()
{
    /* Enter your code here. Read input from STDIN. Print output to STDOUT */
    char s[1000];
    int count[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
    char temp;
    scanf("%s", s);

    for (int i = 0; i < 10; i++)
    {
        temp = i;

        for (int j = 0; j < strlen(s); j++)
        {
            if (s[j] == i)
            {
                count[i] = count[i] + 1;
                continue;
            }
            else
            {
                continue;
            }
        }
    }

    for (int k = 0; k < 10; k++)
    {
        printf("%d ", count[k]);
    }

    return 0;
}

您正在将一个字符与一个整数进行比较。现在,char 是一个数字类型,所以你可以这样做,但结果不是你所期望的。字符'0'在ASCII中是48,例如

您可以将 01 或任何其他单个数字转换为其 ASCII 表示形式,方法是将其添加到 '0'

至少你需要写

if (s[j] == i + '0')

否则你正在尝试比较一个像 '0' 这样可以有 ASCII 码 48 的字符和整数 0.

但在任何情况下,for 循环都是低效的。

最好写成:

for (const char *p = s; *p; ++p)
{
    if ('0' <= *p && *p <= '9') ++count[*p - '0'];
}

if (s[j] == i) => 这里s定义为字符,i定义为整数。因此,要解决此问题,您必须将整数转换为字符。 sprintf() 可以工作或简单的 +'0'。