【问题标题】:How do I compare an integer with a character in a string in C?如何将整数与C中字符串中的字符进行比较?
【发布时间】:2021-08-10 08:35:38
【问题描述】:

我想将字符串中的整数与整数 (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;
}

这没有问题(在大多数情况下有效,但在少数情况下失败)。那么你能给我一个替代的和最好的主意吗? 提前致谢

完整的图片 -

【问题讨论】:

  • ⟼请记住,尤其是在 Stack Overflow 上学习和提问时,尽可能让代码保持井井有条是很重要的。 Consistent indentation 有助于传达结构,更重要的是传达意图,这有助于我们快速找到问题的根源,而无需花费大量时间来尝试解码正在发生的事情。
  • 哪些特殊情况失败了?
  • 请注意,更有效且通常更好的方法是isdigit() from &lt;ctype.h&gt;
  • @RaviKumar 一个潜在的候选者是包含空格的输入。 scanf 只会读到第一个空格。
  • 所以,看完作业,很明显你的数组太短了。据说输入最多 1000 个字符。 scanf 与此无关,因为输入格式保证为字母数字。

标签: c string c-strings


【解决方案1】:

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

char num[100];

赋值约束为:

1 <= len(num) <= 1000

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

【讨论】:

    【解决方案2】:

    除了输入缓冲区太小(即 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'];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-16
      • 2020-04-15
      • 1970-01-01
      • 1970-01-01
      • 2016-10-17
      • 1970-01-01
      • 2020-12-18
      相关资源
      最近更新 更多