Проверка символов и ctype.h

Последнее обновление: 10.01.2025

Файл ctype.h предоставляет определение ряда функций, которые позволяют проверить тип символа.

isspace

Функция isspace() позволяет проверить, является ли символ пробелом. Причем в данном случае "пробел" представляет как собственно пробел, так и табуляцию, перевод строки, возврат каретки. Если символ не является пробелом, то функция возвращает 0. Если символ является пробелом, то функция возвращает ненулевое значение. Например:

#include <stdio.h>
#include <ctype.h>

int main(void)
{
    char c1 = 't';
    char c2 = ' ';
    char c3 = '\n';
    char c4 = '\t';
    char c5 = '\r';
    printf("isspace(c1): %d\n", isspace(c1));
    printf("isspace(c2): %d\n", isspace(c2));
    printf("isspace(c3): %d\n", isspace(c3));
    printf("isspace(c4): %d\n", isspace(c4));
    printf("isspace(c5): %d\n", isspace(c5));
     
    return 0;
}

Здесь непробельным символом является только переменная c1, поэтому isspace(c1) возвращает 0. Остальные символы представляют "пробелы". Консольный вывод:

isspace(c1): 0
isspace(c2): 8192
isspace(c3): 8192
isspace(c4): 8192
isspace(c5): 8192

isalnum()

Функция isalnum() проверяет, является ли аргумент цифрой или алфавитным символом. Если в функцию передан алфавитный символ или цифра, то функция возвращает ненулевое значение (например, 1). В остальных случаях возвращается 0:

#include <stdio.h>
#include <ctype.h>

int main(void)
{
    char c1 = 't';
    char c2 = '3';
    char c3 = ' ';
    char c4 = '\t';
    char c5 = '+';
    printf("isalnum(c1): %d\n", isalnum(c1));   // isalnum(c1): 1
    printf("isalnum(c2): %d\n", isalnum(c2));   // isalnum(c2): 1
    printf("isalnum(c3): %d\n", isalnum(c3));   // isalnum(c3): 0
    printf("isalnum(c4): %d\n", isalnum(c4));   // isalnum(c4): 0
    printf("isalnum(c5): %d\n", isalnum(c5));   // isalnum(c5): 0
     
    return 0;
}

isalpha()

Функция isalpha() проверяет, является ли аргумент алфавитным символом. Если в функцию передан алфавитный символ, то функция возвращает ненулевое значение (например, 1). В остальных случаях возвращается 0:

#include <stdio.h>
#include <ctype.h>

int main(void)
{
    char c1 = 't';
    char c2 = '3';
    char c3 = ' ';
    char c4 = '\t';
    char c5 = '+';
    printf("isalpha(c1): %d\n", isalpha(c1));   // isalpha(c1): 1024
    printf("isalpha(c2): %d\n", isalpha(c2));   // isalpha(c2): 0
    printf("isalpha(c3): %d\n", isalpha(c3));   // isalpha(c3): 0
    printf("isalpha(c4): %d\n", isalpha(c4));   // isalpha(c4): 0
    printf("isalpha(c5): %d\n", isalpha(c5));   // isalpha(c5): 0
     
    return 0;
}

isdigit() и isxdigit()

Функция isdigit() проверяет, является ли аргумент цифрой. Если в функцию передана цифра, то функция возвращает ненулевое значение (например, 1). В остальных случаях возвращается 0:

#include <stdio.h>
#include <ctype.h>

int main(void)
{
    char c1 = 't';
    char c2 = '3';
    char c3 = ' ';
    char c4 = '\t';
    char c5 = '+';
    printf("isdigit(c1): %d\n", isdigit(c1));   // isdigit(c1): 0
    printf("isdigit(c2): %d\n", isdigit(c2));   // isdigit(c2): 2048
    printf("isdigit(c3): %d\n", isdigit(c3));   // isdigit(c3): 0
    printf("isdigit(c4): %d\n", isdigit(c4));   // isdigit(c4): 0
    printf("isdigit(c5): %d\n", isdigit(c5));   // isdigit(c5): 0
     
    return 0;
}

Функция isxdigit() проверяет, является ли символ шестнадцатеричной цифрой, то есть также может представлять алфавитные символы A/a, B/b, C/c, D/d, E/e, F/f:

#include <stdio.h>
#include <ctype.h>

int main(void)
{
    char c1 = '3';
    char c2 = 'e';
    char c3 = 'E';
    char c4 = 'H';
    char c5 = '\0';
    printf("isxdigit(c1): %d\n", isxdigit(c1));   // isxdigit(c1): 4096
    printf("isxdigit(c2): %d\n", isxdigit(c2));   // isxdigit(c2): 4096
    printf("isxdigit(c3): %d\n", isxdigit(c3));   // isxdigit(c3): 4096
    printf("isxdigit(c4): %d\n", isxdigit(c4));   // isxdigit(c4): 0
    printf("isxdigit(c5): %d\n", isxdigit(c5));   // isxdigit(c5): 0
     
    return 0;
}

iscntrl()

Функция iscntrl() проверяет, является ли аргумент управляющей последовательностью (например, \n, \t и т.д.). Если аргумент - управляющая последовательность, то возвращается ненулевое значение. В остальных случаях возвращается 0:

#include <stdio.h>
#include <ctype.h>

int main(void)
{
    char c1 = 't';
    char c2 = '\0';
    char c3 = ' ';
    char c4 = '\t';
    char c5 = '\\';
    printf("iscntrl(c1): %d\n", iscntrl(c1));   // iscntrl(c1): 0
    printf("iscntrl(c2): %d\n", iscntrl(c2));   // iscntrl(c2): 2
    printf("iscntrl(c3): %d\n", iscntrl(c3));   // iscntrl(c3): 0
    printf("iscntrl(c4): %d\n", iscntrl(c4));   // iscntrl(c4): 2
    printf("iscntrl(c5): %d\n", iscntrl(c5));   // iscntrl(c5): 0
     
    return 0;
}

Обратите внимание, что наличие слеша перед символом не обязательно означает управляющую последовательность и может применяться лишь для экранирования, например, "\\" или "'"

isprint()

Функция isprint() является антиподом функции iscntrl() - она проверяет, является ли аргумент печатаемым символом. Если аргумент - печатаемый символ, то возвращается ненулевое значение. В остальных случаях возвращается 0:

#include <stdio.h>
#include <ctype.h>

int main(void)
{
    char c1 = 't';
    char c2 = '\0';
    char c3 = ' ';
    char c4 = '\t';
    char c5 = '\';
    printf("isprint(c1): %d\n", isprint(c1));   // isprint(c1): 16384
    printf("isprint(c2): %d\n", isprint(c2));   // isprint(c2): 0
    printf("isprint(c3): %d\n", isprint(c3));   // isprint(c3): 16384
    printf("isprint(c4): %d\n", isprint(c4));   // isprint(c4): 0
    printf("isprint(c5): %d\n", isprint(c5));   // isprint(c5): 16384
     
    return 0;
}

Также обратите внимание, что пробел является печатаемым символом, хотя он и не имеет графическом воплощения.

isgraph()

Функция isgraph() проверяет, имеет ли символ графическое представление. Если это графический символ, то функция возвращает ненулевое значение. В остальных случаях возвращается 0:

#include <stdio.h>
#include <ctype.h>

int main(void)
{
    char c1 = 't';
    char c2 = '3';
    char c3 = ' ';
    char c4 = '\t';
    char c5 = '\0';
    printf("isgraph(c1): %d\n", isgraph(c1));   // isgraph(c1): 32768
    printf("isgraph(c2): %d\n", isgraph(c2));   // isgraph(c2): 32768
    printf("isgraph(c3): %d\n", isgraph(c3));   // isgraph(c3): 0
    printf("isgraph(c4): %d\n", isgraph(c4));   // isgraph(c4): 0
    printf("isgraph(c5): %d\n", isgraph(c5));   // isgraph(c5): 0
     
    return 0;
}

ispunct()

Функция ispunct() проверяет, является ли аргумент пунктуационным символом (точка, запятая и т.д.). Если аргумент - пунктуационный символ, то возвращается ненулевое значение. В остальных случаях возвращается 0:

#include <stdio.h>
#include <ctype.h>

int main(void)
{
    char c1 = 't';
    char c2 = '\"';
    char c3 = ',';
    char c4 = '>';
    char c5 = '\n';
    printf("ispunct(c1): %d\n", ispunct(c1));   // ispunct(c1): 0
    printf("ispunct(c2): %d\n", ispunct(c2));   // ispunct(c2): 4
    printf("ispunct(c3): %d\n", ispunct(c3));   // ispunct(c3): 4
    printf("ispunct(c4): %d\n", ispunct(c4));   // ispunct(c4): 4
    printf("ispunct(c5): %d\n", ispunct(c5));   // ispunct(c5): 0
     
    return 0;
}

Или, к примеру, выведем все пунктуационные символы:

#include <stdio.h>
#include <ctype.h>

int main(void)
{
    // все символы пунктуации
    for (int i = 0; i <= 127; ++i){
        if(ispunct(i)) printf("%c ", i);
    }
     
    return 0;
}

Результат:

! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~

islower() и isupper()

Функция islower() проверяет, представляет ли аргумент алфавитный символ в нижнем регистре. Если это алфавитный символ в нижнем регистре, то функция возвращает ненулевое значение. В остальных случаях возвращается 0. Аналогично функция islower() проверяет, представляет ли аргумент алфавитный символ в верхнем регистре:

#include <stdio.h>
#include <ctype.h>

int main(void)
{
    char c1 = 't';
    char c2 = 'T';
    char c3 = '\t';
    char c4 = '5';

    printf("islower(c1): %d\n", islower(c1));   // islower(c1): 512
    printf("islower(c2): %d\n", islower(c2));   // islower(c2): 0
    printf("islower(c3): %d\n", islower(c3));   // islower(c3): 0
    printf("islower(c4): %d\n", islower(c4));   // islower(c4): 0

    printf("isupper(c1): %d\n", isupper(c1));   // isupper(c1): 0
    printf("isupper(c2): %d\n", isupper(c2));   // isupper(c2): 256
    printf("isupper(c3): %d\n", isupper(c3));   // isupper(c3): 0
    printf("isupper(c4): %d\n", isupper(c4));   // isupper(c4): 0
     
    return 0;
}

tolower() и toupper()

Функция tolower() переводит алфавитный символ в нижний регистр. Если символ уже в нижнем регистре или вообще не является алфавитным символом, то ничего не происходит. Аналогично функция tolower() переводит алфавитный символ в верхний регистр:

#include <stdio.h>
#include <ctype.h>

int main(void)
{
    char c1 = 't';
    char c2 = 'T';
    char c3 = '5';

    printf("tolower(c1): %c\n", tolower(c1));   // tolower(c1): t
    printf("tolower(c2): %c\n", tolower(c2));   // tolower(c2): t
    printf("tolower(c3): %c\n", tolower(c3));   // tolower(c3): 5

    printf("toupper(c1): %c\n", toupper(c1));   // toupper(c1): T
    printf("toupper(c2): %c\n", toupper(c2));   // toupper(c2): T
    printf("toupper(c3): %c\n", toupper(c3));   // toupper(c3): 5
     
    return 0;
}
Помощь сайту
Юмани:
410011174743222
Номер карты:
4048415020898850