我们如何计算左侧包含零的数字中的位数?例如,对于整数输入0012
,它应显示4
,对于整数输入0000
,它应再次显示4
。实际上,首先我要检查数字中的位数,然后检查它是偶数还是奇数。
清除对数字位数的理解的更多示例:
integer input:012 output:3
integer input:00001 output:5
integer input:1010 output:4
答案 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()
,那么chqrlie的answer可能是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)))
假设只输入了数字。