这是从输入的整数中计数特定数字的代码。我已经这样做了:
#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;
}
任何形式的帮助将不胜感激。提前谢谢!
答案 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;
}