1

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で数字以外の文字を指すまで増やす方法は他にありますか?

4

3 に答える 3

6

おそらく代わりにisdigitfromを使用する必要があります。ctype.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」の値を減算して、同等の1桁の10進数(1桁の10進数の場合)を取得してから、値をテストできます。 。

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

または単にこれを行います:

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