频率数字计数

时间:2019-10-12 18:06:49

标签: c

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

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;
}

3 个答案:

答案 0 :(得分:0)

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

scanf("%s", &num);

扫描值时,需要提供变量的地址。那就是您让程序知道将值放在何处。 &num 指向变量num的地址。但是,如果您只写scanf("%s",num),则将提供num变量的值,您根本不需要关心它。无论如何,您都会覆盖该值。


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

答案 1 :(得分:0)

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

    char num[7] = {"ABC123");
        if (num[3] == 1)
    {
       printf("True\n");
    }
    else
    {
      printf("False\n");
    }
    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字符与最后一个数字进行比较(假设我们仅比较两个数字,我们将停在{{1 }}。

提示:可以使用n+1-th

将数字字符转换为整数
char = char - '0'

答案 2 :(得分:0)

我在这里没有看到任何问题,看来输出无法正确读取 因此请尝试正确打印

!**/ProjectToExclude.csproj

,以便您可以阅读多少个数字。如果您发现错误的频率, 发布您输入错误的输入。