计算左侧包含零的数字中的位数

时间:2017-06-24 17:48:32

标签: c

我们如何计算左侧包含零的数字中的位数?例如,对于整数输入0012,它应显示4,对于整数输入0000,它应再次显示4。实际上,首先我要检查数字中的位数,然后检查它是偶数还是奇数。

清除对数字位数的理解的更多示例:

integer input:012 output:3
integer input:00001 output:5
integer input:1010 output:4

3 个答案:

答案 0 :(得分:3)

这是一种计算字符串开头位数的简单方法,包括初始零:

#include <string.h>

size_t count_digits(const char *s) {
    return strspn(s, "0123456789");
}

strspn()是一个鲜为人知但标准的函数,它计算第一个字符串参数开头的字符数,这些字符存在于第二个字符串参数中。其对应strcspn()计算第二个字符串参数中不存在的字符,它可用于从fgets()填充的缓冲区中删除尾随换行符:buf[strcspn(buf, "\n")] = '\0';

答案 1 :(得分:0)

如果您不想使用简单的strlen(),那么

chqrlieanswer可能是C中最简单的解决方案。以下将更有效:

#include <stdio.h>
#include <ctype.h>

size_t numDigits(const char *str)
{
    size_t n = 0;

    // increment counter while the character is a digit:
    while (isdigit(str[n])) ++n;

    return n;
}

int main(int argc, char **argv)
{
    if (argc != 2)
    {
        fprintf(stderr, "Usage: %s [number]\n", argv[0]);
        return 1;
    }
    size_t digits = numDigits(argv[1]);
    if (argv[1][digits]) // not end of string after the digits found
    {
        puts("not a number");
    }
    else
    {
        printf("%zu digits\n", digits);
    }
    return 0;
}

答案 2 :(得分:0)

我是新来的,但大多数语言都有左边的修剪和right函数用于删除空格,Len函数用于返回字符串长度,如下所示:

nbrdigits = len(rtrim(ltrim(inputstring)))

假设只输入了数字。