2011-12-23 14 views

risposta

71

Ti consigliamo di utilizzare le funzioni standard isalpha() e isdigit() in <ctype.h>.

char c = 'a'; // or whatever 

if (isalpha(c)) { 
    puts("it's a letter"); 
} else if (isdigit(c)) { 
    puts("it's a digit"); 
} else { 
    puts("something else?"); 
} 
10

Nessuno di questi è utile. Utilizzare isalpha() o isdigit() dalla libreria standard. Sono nello <ctype.h>.

4

Se (theChar >= '0' && theChar <='9') è una cifra. Hai un'idea.

12

<ctype.h> comprende una serie di funzioni per determinare se un char rappresenta una lettera o un numero, come isalpha, isdigit e isalnum.

Il motivo per cui int a = (int)theChar non farà ciò che si desidera è perché a manterrà semplicemente il valore intero che rappresenta un carattere specifico. Ad esempio, il numero di ASCII per '9' è 57, e per 'a' è 97.

anche per ASCII:

  • Numerico - if (theChar >= '0' && theChar <= '9')
  • alfabetica -
    if (theChar >= 'A' && theChar <= 'Z' || theChar >= 'a' && theChar <= 'z')

Date un'occhiata a un ASCII table da vedere per te.

+1

Il controllo per '0' <= x <= '9' è corretto per tutte le implementazioni conformi allo standard (ASCII o non è irriverente). C richiede che le cifre decimali abbiano una rappresentazione contigua. Per quanto riguarda le lettere, tutte le scommesse sono disattivate. – Wiz

+0

@ Wiz bello! C99 5.2.1: http://stackoverflow.com/a/35936519/895245 –

16

caratteri sono solo numeri interi, in modo da poter effettivamente fare un confronto diretto del tuo personaggio contro letterali:

if(c >= '0' && c <= '9'){ 

Questo vale per tutti i caratteri. See your ascii table.

ctype.h fornisce anche funzioni per fare questo per voi.

+0

Questo è corretto, ma non perché ASCII sia garantito, ma a causa della contiguità delle cifre: http://stackoverflow.com/a/35936519/ 895.245 –

1

Normalmente è possibile verificare la presenza di lettere o numeri utilizzando semplici condizioni

if((ch>='a' && ch<='z') || (ch>='A' && ch<='Z)) 
{ 
    /*This is an alphabet*/ 
} 

Per cifre è possibile utilizzare

if(ch>='0' && ch<='9') 
{ 
    /*It is a digit*/ 
} 

Ma dal momento che i personaggi in C sono trattate internamente come ASCII values è anche possibile utilizzare valori ASCII per controllare lo stesso.

How to check if a character is number or letter

1

standard di C99 sul c >= '0' && c <= '9'

c >= '0' && c <= '9' (citato in another answer) funziona perché C99 N1256 standard draft 5.2.1 "Insiemi di caratteri" dice:

Sia la fonte e l'esecuzione carattere di base set, il valore di ciascun carattere dopo 0 nell'elenco precedente di cifre decimali deve essere maggiore di il valore del precedente.

ASCII tuttavia non è garantito.