2010-02-16 12 views
17

Ho bisogno di controllare se un carattere è cifra o meno.Come verificare se un carattere è cifra o meno in Objective-C?

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

Ho bisogno di scoprire se 'c' è una cifra o meno. Come posso implementare questo controllo in Objective-C?

+5

attento, 'characterAtIndex:' restituisce un 'unichar' , non un 'char'. Troncamenti come questo potrebbero portare a falsi positivi se si ha a che fare con testo non ASCII. – dreamlax

risposta

20

Nella norma C esiste una funzione int isdigit(int ch); definita in "ctype.h". Restituirà un valore diverso da zero (VERO) se ch è una cifra.

Inoltre è possibile controllare manualmente:

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

Thnx un sacco ... Ho una domanda ?? Come convertire unichar in int? Ho appena provato il seguente int ivalue = [[NSNumber numberWithChar: cChar] intValue]; E 'corretto ?? – syam

+0

@syam: non è necessario saltare attraverso tanti cerchi. Dovresti essere in grado di convertire 'unichar' in' int' facendo 'int ivalue = cChar;' – dreamlax

+3

E se fossero numeri giapponesi '零' - '九'? – amphetamachine

1

Si consiglia di verificare NSCharacterSet di riferimento di classe.

0

si può pensare di scrivere una funzione generica come la seguente per questo:

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

Questa funzione non fa ciò che l'OP chiedeva. Inoltre, un 'NSScanner' ti alleggerirà della maggior parte dello sforzo che la tua funzione mette in campo. – dreamlax

29

Nota: Il valore restituito per characterAtIndex: non è un char, ma un unichar. Quindi la fusione come questo può essere pericoloso ...

Un codice alternativa sarebbe:

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

Questo è in realtà abbastanza semplice:

isdigit([YOUR_STRING characterAtIndex:YOUR_POS]) 
+1

Sono andato con questa risposta, ma solo perché tutto quello che voglio è 0-9 (perché ho a che fare con un linguaggio di programmazione, non con i linguaggi rivolti all'utente.) Se avessi a che fare con le lingue affrontate dagli utenti, probabilmente lo userei la soluzione 'decimalDigitCharacterSet'. http://stackoverflow.com/a/2271360/901641 – ArtOfWarfare

Problemi correlati