如何在 C 中将整数与字符串中的字符进行比较?

How do I compare an integer with a character in a string in C?

我想将字符串中的整数与整数 (0-9) 进行比较,我写了这个 -

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

int main() {
  char num[100];
  int count = 0;
  scanf("%s", num);
  int len = strlen(num);
  for (int i = 0; i <= 9; i++)
  {
    for (int j = 0; j <= len; j++)
    {
      if (i == (num[j] - '0'))
      {
        count++;
      }
    }
    printf("%d ", count);
    count = 0;
  }
  return 0;
}

这没有问题(在大多数情况下有效,但在少数情况下会失败)。那么,您能给我替代方案和最佳方案吗? 提前致谢

完整图片 -

根本原因不在字符比较中,而是在分配不足的缓冲区中:

char num[100];

赋值约束为:

1 <= len(num) <= 1000

增加缓冲区大小后,所有测试都通过了。

除了输入缓冲区太小(即 100 而不是 1001)之外,我认为您的方法太复杂了。

我建议使用一个数组来计算频率,而不是嵌套循环,即一个包含 10 个元素的数组,以便每个数字都有一个计数器。

int main() {
  char num[1001];        // 1000 chars + 1 zero termination
  int count[10] = {0};   // Array of 10 zero initialized counters, one for each digit
  scanf("%1000s", num);  // At max accept 1000 chars input
  char* p = num;
  while (*p)
  {
      if (isdigit(*p) ++count[*p - '0'];
      ++p;
  }
  for (int i = 0; i < 10; ++i) printf("%d ", count[i]);
  puts("");
  return 0;
}

如果您不想使用 isdigit,您可以改为:

if (*p >= '0' && *p <= '9') ++count[*p - '0'];