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

时间:2008-09-15 19:42:59

标签: c string function

我需要获取包含数字1的数字位数。我知道在java中我可以将输入作为String并使用charAt,但我知道没有隐含的字符串函数C.我怎样才能做到这一点?

12 个答案:

答案 0 :(得分:6)

分裂和模数是你的朋友。

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

答案 1 :(得分:1)

作业?

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

答案 2 :(得分:1)

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

 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异常。如果你超过一个字符串的结尾,程序将崩溃,或者更糟糕的是它可能继续运行,但内部状态混乱。

答案 3 :(得分:1)

尝试类似......

int digit = 0;
int value = 11031;

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

答案 4 :(得分:1)

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

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

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

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

答案 5 :(得分:0)

有些事情:

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

答案 6 :(得分:0)

int count_digit(int nr, int digit) {
    int count=0;
    while(nr>0) {
      if(nr%10==digit)
        count++;
      nr=nr/10;
    }
    return count;
}

答案 7 :(得分:0)

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

您未能指定包含“输入整数”的变量的类型。如果输入整数是整数类型(例如,“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;
}

希望这会有所帮助。下一次,做自己的功课。离开我的草坪!孩子们,这些天......,

答案 8 :(得分:0)

int countDigit(int Number, int Digit)
{
   int counter = 0;

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

   return counter;
}

答案 9 :(得分:0)

有些事情如下:

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

答案 10 :(得分:0)

这样做。 : - )

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

答案 11 :(得分:0)

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

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