如何识别C中整数输入的具体数字?

我需要得到包含数字1的数字位数。我知道在java中我可以将输入作为String并使用charAt ,但我知道C中没有隐式字符串函数。我怎么能完成这个?

分区和模数是你的朋友。

 #include "stdio.h" int main(){ int digits[] = {0,0,0,0,0,0,0,0,0,0}; int i = 11031; while(i > 0){ digits[i % 10]++; i = i / 10; } printf("There are %d ones.\n", digits[1]); } 

家庭作业?

您可以使用fread()函数将其读入char* ,然后在单独的变量中存储读取的字节数。 然后使用for循环遍历缓冲区并计算每个字节的数量。

试试像……

 int digit = 0; int value = 11031; while(value > 0) { digit = value % 10; /* Do something with digit... */ value = value / 10; } 

我认为这是一个基本的理解问题,每个人都不可避免地要从一种语言转换到另一种语言。

当你开始熟悉java时,通过了解字符串在C中的工作方式的一个很好的参考是查看string.h的工作原理。 如果java字符串中的Object是内置的,则C中的字符串只是整数数组。

有很多教程,当我在今年早些时候开始时帮助我的是http://www.physics.drexel.edu/students/courses/Comp_Phys/General/C_basics/查看字符串部分。

有时候问一个问题可以加快学习速度,而不是几个小时地完成教科书。

如果您只有这个号码,那么您可以这样做:

  int val; //Input ... int ones = 0; while(val != 0) { ones += ((val % 10) == 1) ? 1 : 0; val /= 10; } 

如果你有一个字符串(char *),你会做这样的事情:

 while(*str != '\0') { if(*str++ == '1') { ones++; } } 

值得注意的是c确实有一个charAt函数,在某种程度上:

 "java".charAt(i) == "c the language"[i]; 

通过索引到char *,您可以获得所需的值,但是您需要小心,因为没有indexOutOfBoundsexception。 如果你超过一个字符串的结尾,程序将崩溃,或者更糟糕的是它可能会继续运行,但内部状态混乱。

有点像:

 int val=11031; int count=0; int i=0; char buf[100]; sprint(buf, "%d", val); for(i=0; (i < sizeof(buf)) && (buf[i]); i++) { if(buf[i] == '1') count++; } 
 int count_digit(int nr, int digit) { int count=0; while(nr>0) { if(nr%10==digit) count++; nr=nr/10; } return count; } 

这对我来说听起来像是一个家庭作业问题。 哦,这是你的生活。

您未能指定包含“输入整数”的变量的类型。 如果输入整数是整数类型(例如,“int”),请尝试:

 int countOnes(int input) { int result = 0; while(input) { result += ((input%10)==1); result /= 10; } return result; } 

如果“输入整数”在字符串中,请尝试以下操作:

 int countOnes(char *input) { int result = 0; while(input && *input) { result += (*input++ == '1'); } return result; } 

希望这可以帮助。 下一次,做自己的功课。 离开我的草坪! 孩子们,这几天……

 int countDigit(int Number, int Digit) { int counter = 0; do { if( (Number%10) == Digit) { counter++; } }while(Digit>0) return counter; } 

有点像这样:

 #include  main() { char buf[100]; char *p = buf; int n = 0; scanf("%s", buf); while (*p) { if (*p == '1') { n++; } p++; } printf ("'%s' contains %i ones\n", buf, n); } 

这样做。 🙂

 int count_digits(int n, int d) { int count = 0; while(n*10/=10) if (n%10==d) count++ return count; } 

对于那些将问题称为家庭作业问题的人:我不得不说,大多数人都提供了作业答案。

你没有使用除法/模数来获取生产代码中的数字,首先是因为它不是最理想的(你的CPU是为二进制算术设计的而不是十进制的),其次是因为它不直观。 即使它最初不是一个字符串,将它转换为一个然后对字符进行计数更为理想(std :: count是C ++中的方法)。