如何检查指向char数组的指针是否指向数字字符?

时间:2012-12-01 13:19:52

标签: c char arrays

我有一个指向char数组的指针。我想增加它,直到它不指向数字/数字(在char数组中表示为char)。

例如,如果此{char}数组中的pointer指向'2'

['1'][' ']['2']['3']['4'][' '][' '][' ']['5']['6']['7']
            ^
         *pointer

我想增加它,直到它指向第一个非数字字符 - ' '

['1'][' ']['2']['3']['4'][' '][' '][' ']['5']['6']['7']
                           ^
                        *pointer

我知道我可以这样做:

while (*pointer == '0' || *pointer == '1' || *pointer == '2' || ...)
    pointer++;

return pointer;

但它很长而且不优雅。

我以为我可以使用atoi(),当指针没有指向数字时返回0

while (atoi(pointer) != 0 || *pointer == '0') //while it still points at a number
    pointer++; //increase the pointer until it will not point at a number

return pointer;

但它似乎不起作用。也许没关系,我在其他地方也有错,但无论如何我想知道:

是否有其他(更好的)方法可以检查指向char数组的指针是否指向数字/数字并增加它直到它指向非数字字符,在C?

3 个答案:

答案 0 :(得分:6)

您应该使用isdigit中的ctype.h代替。类似的东西:

while (*pointer && isdigit(*pointer))
    pointer++;

答案 1 :(得分:2)

while (*pointer >= '0' && *pointer <= '9')
    pointer++;

return pointer;

答案 2 :(得分:1)

由于数字在ASCII和UTF-16中具有连续值,因此您可以从字符值中减去“0”的值,以获得单位十进制等值(如果它是单位十进制数) ,然后测试该值。

while(*pointer-'0'>=0 && *pointer-'0'<=9) pointer++;

或者干脆就这样做:

while(*pointer>='0' && *pointer<='9') pointer++;