如何识别C中整数输入的特定数字?

如何识别C中整数输入的特定数字?,c,string,function,C,String,Function,我需要得到包含数字1的位数。我知道在java中,我可以将输入作为字符串并使用字符,但我知道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; }

我需要得到包含数字1的位数。我知道在java中,我可以将输入作为
字符串
并使用
字符
,但我知道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 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*,您可以获得所需的值,但需要小心,因为没有indexOutOfBounds异常。如果超过字符串的结尾,程序将崩溃,或者更糟的是,它可能会继续运行,但内部状态混乱。

大致如下:

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 val=11031;
整数计数=0;
int i=0;
char-buf[100];
sprint(buf,“%d”,val);
对于(i=0;(i
试试像

int digit = 0;
int value = 11031;

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

这听起来像是我的家庭作业问题。哦,好吧,这是你的生活

指定包含“输入整数”的变量类型失败。如果输入整数是整数类型(例如“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 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 <stdio.h>

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);
}
#包括
main(){
char-buf[100];
char*p=buf;
int n=0;
scanf(“%s”,buf);
而(*p){
如果(*p==“1”){
n++;
}
p++;
}
printf(“%s”包含%i个\n”,buf,n);
}
这样就可以了。:-)


对于那些把这个问题称为家庭作业问题的人来说:我不得不说,你们大多数人都提供了家庭作业的答案


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

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

当您开始熟悉java时,了解string在C中是如何工作的一个很好的参考是查看string.h是如何工作的。在java字符串中,字符串是对象和内置的,而C中的字符串只是整数数组

有很多教程,其中一个在我今年早些时候开始学习的时候帮助了我,那就是看字符串部分


有时问问题比连续几个小时翻课本要快得多。

将整数转换为字符串的唯一方法是使用除法/模。即使您使用最简单的方法(C中的itoa),也是这样做的。。。总之,@hoyhoy答案比您的答案更优化,因为您需要首先转换整数,然后计算字符数