Określ, czy znak jest liczbą czy literą

Jak określić, czy char W C, np. a lub 9 jest liczbą lub literą?

Czy lepiej użyć:

int a = Asc(theChar);
Albo to?
int a = (int)theChar
Author: abhi, 2011-12-23

7 answers

Będziesz chciał używać standardowych funkcji isalpha() i isdigit() w <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?");
}
 76
Author: Greg Hewgill,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-23 02:58:36

Znaki są tylko liczbami całkowitymi, więc możesz zrobić proste porównanie swojej postaci z literałami:

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

Dotyczy to wszystkich znaków. Zobacz tabelę ascii .

Ctype.h zapewnia również funkcje, które mogą to zrobić za Ciebie.

 18
Author: Christopher Neylan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-23 03:01:39

<ctype.h> zawiera szereg funkcji do określania, czy char reprezentuje literę lub liczbę, takich jak isalpha, isdigit i isalnum.

Powodem, dla którego int a = (int)theChar nie zrobi tego, co chcesz, jest to, że a po prostu przechowuje wartość całkowitą, która reprezentuje określony znak. Na przykład liczba ASCII dla '9' to 57, a dla 'a' to 97.

Również dla ASCII:

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

Spójrz na tabela ASCII aby zobaczyć na własne oczy.

 13
Author: AusCBloke,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-23 03:00:08

Żadne z nich nie robi nic użytecznego. Użyj isalpha() LUB isdigit() z biblioteki standardowej. Są w <ctype.h>.

 10
Author: Ernest Friedman-Hill,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-23 02:58:58

Jeśli {[0] }to cyfra. Rozumiesz.

 5
Author: Mike Dunlavey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-23 02:59:39

C99 standard on c >= '0' && c <= '9'

c >= '0' && c <= '9' (wspomniany w innej odpowiedzi ) działa ponieważ C99 n1256 standard draft 5.2.1 "zestawy znaków" mówi:

Zarówno w źródłowym, jak i wykonawczym podstawowym zestawie znaków, wartość każdego znaku po 0 w powyższej liście cyfr dziesiętnych jest o jeden większa od wartości poprzedniej.

ASCII nie jest jednak gwarantowane.

 2
Author: Ciro Santilli 新疆改造中心 六四事件 法轮功,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:26:27

Możesz normalnie sprawdzić litery lub cyfry za pomocą prostych warunków

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

Dla cyfr można użyć

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

Ale ponieważ znaki w C są wewnętrznie traktowane jako wartości ASCII, Możesz również użyć wartości ASCII, aby sprawdzić to samo.

Jak sprawdzić, czy znak jest liczbą lub literą

 1
Author: Pankaj Prakash,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-28 13:57:27