c - C 中输入整数的特定位数计数

标签 c arrays loops

这是从输入的整数中计算出特定数字的代码。我已经这样做了:

#include<stdio.h>

int main() {

  int number, digitToCount;
  scanf("%d %d", &number, &digitToCount);

  int counter = 0;

  while (number != 0) {
    int tempDigit = number % 10;
    if (tempDigit == digitToCount)
      counter++;
    number = number / 10;
  }

  printf("%d", counter);

  return counter;
}

但是有什么办法可以做到这一点吗?这个方法正确吗?下面这段代码的错误在哪里?

#include<stdio.h>

int main() {
  int c = 0, n, t = 0, d;

  printf("Enter an integer number:");
  scanf("%d", &n);

  printf("desired digit:");
  scanf("%d", &d);

  char str[50], str2[0];
  sprintf(str, "%d", n);
  sprintf(str2, "%d", d);

  for (t = 0; t <= 50; t++) {
    if (str2[0] == str[t]) {

      c = c + 1;
    }

  }

  printf("%d", c);

  return c;
}

任何形式的帮助将不胜感激。提前致谢!

最佳答案

尽管您可以采用后一种方法,但它的效率可能低于前一种方法。您不会注意到对于这种大小的问题,但值得注意的是格式化(即在文本和内部数据类型之间转换)相对昂贵。

更糟糕的是,在第二种方法中,您尝试从文本转换为数字,然后再转换回文本。为什么?这并不是完全毫无意义,因为它会稍微改变程序在某些非数字输入情况下的行为(它会以不同的方式失败),但如果您希望数据作为字符数组,那么就以这种方式读取它首先:

#include<stdio.h>

int main() {
  char str[50], d;
  int c = 0, t;

  printf("Enter an integer number:");
  scanf("%49s", str);

  printf("desired digit:");
  scanf("%c", &d);

  for (t = 0; str[t] != '\0'; t++) {
    if (str[t] == d) {
      c = c + 1;
    }
  }

  printf("%d", c);

  return 0;
}

这仍然存在问题,主要是围绕验证您的输入,但它应该适用于有效的输入,并且对于一些可能无效的输入具有可能有用的行为。

关于c - C 中输入整数的特定位数计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28567343/

相关文章:

c++ - 调用函数时出现段错误

java - 在静态方法中调用ArrayList的实例

r - for if else 循环 - 根据来自不同数据帧的匹配列填充列中的值

c++ - 宏 INT_MAX 在哪里定义的?

c - 错误 : case label does not reduce to an integer constant when using character data type

php - 将关联数组做成类似于 Eloquent 查询集合的集合

用于初始化数组的 C++ 语法

java - 让 FileReader 使用循环读取每四行

java - 退出 while 语句后 if 语句不起作用

C 可变参数递归函数 : what is the syntax?