来自C中输入整数的特定数字计数

时间:2015-02-17 17:25:13

标签: 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;
}

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

2 个答案:

答案 0 :(得分:1)

虽然您可以沿着后一种方法开展工作,但它可能效率低于前一种方法。对于这样大小的问题,你不会注意到,但是要注意格式化(即在文本和内部数据类型之间进行转换)比较昂贵。

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

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

仍然存在问题,主要是围绕验证输入,但它应该适用于有效输入,以及对某些可能无效的行为可能有用的行为。

答案 1 :(得分:0)

我建议您将源编号保留为字符串。像这样:

#include<stdio.h>

int main() {

    char num[256];
    char search;
    int i, count;
    scanf("%s[0-9] %c", num, search);

    if (search < '0' || search > '9') {
        printf("invalid search");
        return -1
        }
    for(i=0, count=0; num[i]; i++) {
        if (num[i] == search)
            count++;
        }
    print("matches %d\n", count);
    return 0;
    }