1

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

例如,如果pointer指向'2'此 char 数组:

['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 中?

4

3 回答 3

6

您可能应该使用isdigitfromctype.h代替。就像是:

while (*pointer && isdigit(*pointer))
    pointer++;
于 2012-12-01T13:21:29.323 回答
2
while (*pointer >= '0' && *pointer <= '9')
    pointer++;

return pointer;
于 2012-12-01T13:21:26.053 回答
1

由于数字在 ASCII 和 UTF-16 中具有连续的值,因此可以从字符的值中减去 '0' 的值,得到一位十进制等效值(如果是一位十进制),然后测试该值.

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

或者干脆这样做:

while(*pointer>='0' && *pointer<='9') pointer++;
于 2012-12-01T13:22:00.947 回答