2010-02-16 5 views
17

Ich muss prüfen, ob ein Zeichen Ziffer ist oder nicht.Wie überprüft man, ob in Objective-C ein Char eine Ziffer ist oder nicht?

NSString *[email protected]"Test55"; 
char c =[strTest characterAtIndex:4]; 

Ich muss herausfinden, ob 'c' eine Ziffer ist oder nicht. Wie kann ich diesen Check in Objective-C implementieren?

+5

Vorsicht, 'characterAtIndex:' gibt einen 'unichar' kein "char". Eine solche Trunkierung kann zu Fehlalarmen führen, wenn Sie mit Nicht-ASCII-Text arbeiten. – dreamlax

Antwort

20

In Standard C ist in "ctype.h" eine Funktion int isdigit(int ch); definiert. Es wird ungleich Null (TRUE) zurückgegeben, wenn ch eine Ziffer ist.

Sie können auch manuell überprüfen:

if(c>='0' && c<='9') 
{ 
    //c is digit 
} 
+0

Thnx viel ... Ich habe eine Frage ?? Wie konvertiert man die Unichar in int? Ich habe gerade folgendes versucht int ivalue = [[NSNummer numberWithChar: cChar] intValue]; Stimmt es? – syam

+0

@Syam: Sie müssen nicht durch so viele Reifen springen. Du solltest "unichar" in "int" umwandeln können, indem du "int ivalue = cChar;" tust. – dreamlax

+3

Was ist, wenn es sich um japanische Ziffern "零" - "九" handelt? – amphetamachine

1

Sie können NSCharacterSet Klassenreferenz überprüfen möchten.

0

Sie können für diese denken eine generische Funktion wie die folgende schreiben:

BOOL isNumericI(NSString *s) 
{ 
    NSUInteger len = [s length]; 
    NSUInteger i; 
    BOOL status = NO; 

    for(i=0; i < len; i++) 
    { 
     unichar singlechar = [s characterAtIndex: i]; 
     if ((singlechar == ' ') && (!status)) 
     { 
     continue; 
     } 
     if ((singlechar == '+' || 
       singlechar == '-') && (!status)) { status=YES; continue; } 
     if ((singlechar >= '0') && 
      (singlechar <= '9')) 
     { 
      status = YES; 
     } else { 
      return NO; 
     } 
    } 
    return (i == len) && status; 
} 
+0

Diese Funktion erfüllt nicht die Anforderungen des OP. Zusätzlich wird ein 'NSScanner' Sie von vielen der Bemühungen Ihrer Funktion entlasten. – dreamlax

29

Hinweis: Der Rückgabewert für characterAtIndex: kein char, sondern ein unichar. So wie das Gießen kann gefährlich sein ...

Ein alternativer Code wäre:

NSString *strTest = @"Test55"; 
unichar c = [strTest characterAtIndex:4]; 
NSCharacterSet *numericSet = [NSCharacterSet decimalDigitCharacterSet]; 
if ([numericSet characterIsMember:c]) { 
    NSLog(@"Congrats, it is a number..."); 
} 
2

Das ist eigentlich ganz einfach:

isdigit([YOUR_STRING characterAtIndex:YOUR_POS]) 
+1

Ich ging mit dieser Antwort, aber nur weil alles, was ich will, ist 0-9 (weil ich mit einer Programmiersprache, nicht Benutzer konfrontiert Sprachen.) Wenn ich mit Benutzer konfrontiert Sprachen, würde ich wahrscheinlich verwenden möchten die 'decimalDigitCharacterSet' Lösung. http://stackoverflow.com/a/2271360/901641 – ArtOfWarfare

Verwandte Themen