◐ Shell
clean mode source ↗

std::iscntrl — cppreference.com

Материал из cppreference.com

<tbody> </tbody>

Определено в заголовочном файле <cctype>

int iscntrl( int ch );

Проверяет, является ли данный символ управляющим символом согласно классификации установленной в данный момент локали C. В локали по умолчанию "C" управляющими символами являются символы с кодами 0x00-0x1F и 0x7F.

Поведение не определено, если значение ch не может быть представлено как unsigned char и не равно EOF.

Параметры

ch символ для классификации

Возвращаемое значение

Ненулевое значение, если символ является управляющим, иначе ноль.

Примечание

Как и все другие функции из <cctype>, поведение std::iscntrl не определено, если значение аргумента не может быть представлено как unsigned char и не равно EOF. Чтобы безопасно использовать эти функции с простыми char (или signed char), аргумент сначала должен быть преобразован в unsigned char:

bool my_iscntrl(char ch)
{
    return std::iscntrl(static_cast<unsigned char>(ch));
}

Также, их не следует использовать напрямую со стандартными алгоритмами, если тип значения итератора является char или signed char. Вместо этого сначала преобразуйте значение в unsigned char:

int count_cntrls(const std::string& s)
{
    return std::count_if(s.begin(), s.end(), 
                      // static_cast<int(*)(int)>(std::iscntrl)         // неправильно
                      // [](int c){ return std::iscntrl(c); }           // неправильно
                      // [](char c){ return std::iscntrl(c); }          // неправильно
                         [](unsigned char c){ return std::iscntrl(c); } // правильно
                        );
}

Пример

#include <cctype>
#include <clocale>
#include <iostream>

int main()
{
    unsigned char c = '\x94'; // управляющий код CCH в ISO-8859-1

    std::cout << "iscntrl(\'\\x94\', локаль C по умолчанию) возвращает "
              << std::boolalpha << !!std::iscntrl(c) << '\n';

    std::setlocale(LC_ALL, "en_GB.iso88591");
    std::cout << "iscntrl(\'\\x94\', локаль ISO-8859-1) возвращает "
              << !!std::iscntrl(c) << '\n';

}

Возможный вывод:

iscntrl('\x94', локаль C по умолчанию) возвращает false
iscntrl('\x94', ISO-8859-1 локаль ISO-8859-1) возвращает true

Смотрите также

ASCII значения символы

iscntrl
iswcntrl

isprint
iswprint

isspace
iswspace

isblank
iswblank

isgraph
iswgraph

ispunct
iswpunct

isalnum
iswalnum

isalpha
iswalpha

isupper
iswupper

islower
iswlower

isdigit
iswdigit

isxdigit
iswxdigit

деся-тичные шестнад-цатерич-ные восьме-ричные
0–8 \x0\x8 \0\10 управляющие коды (NUL, и т.д.) ≠0 0 0 0 0 0 0 0 0 0 0 0
9 \x9 \11 табуляция (\t) ≠0 0 ≠0 ≠0 0 0 0 0 0 0 0 0
10–13 \xA\xD \12\15 пробельные (\n, \v, \f, \r) ≠0 0 ≠0 0 0 0 0 0 0 0 0 0
14–31 \xE\x1F \16\37 управляющие коды ≠0 0 0 0 0 0 0 0 0 0 0 0
32 \x20 \40 пробел 0 ≠0 ≠0 ≠0 0 0 0 0 0 0 0 0
33–47 \x21\x2F \41\57 !"#$%&'()*+,-./ 0 ≠0 0 0 ≠0 ≠0 0 0 0 0 0 0
48–57 \x30\x39 \60\71 0123456789 0 ≠0 0 0 ≠0 0 ≠0 0 0 0 ≠0 ≠0
58–64 \x3A\x40 \72\100 :;<=>?@ 0 ≠0 0 0 ≠0 ≠0 0 0 0 0 0 0
65–70 \x41\x46 \101\106 ABCDEF 0 ≠0 0 0 ≠0 0 ≠0 ≠0 ≠0 0 0 ≠0
71–90 \x47\x5A \107\132 GHIJKLMNOP
QRSTUVWXYZ
0 ≠0 0 0 ≠0 0 ≠0 ≠0 ≠0 0 0 0
91–96 \x5B\x60 \133\140 [\]^_` 0 ≠0 0 0 ≠0 ≠0 0 0 0 0 0 0
97–102 \x61\x66 \141\146 abcdef 0 ≠0 0 0 ≠0 0 ≠0 ≠0 0 ≠0 0 ≠0
103–122 \x67\x7A \147\172 ghijklmnop
qrstuvwxyz
0 ≠0 0 0 ≠0 0 ≠0 ≠0 0 ≠0 0 0
123–126 \x7B\x7E \172\176 {|}~ 0 ≠0 0 0 ≠0 ≠0 0 0 0 0 0 0
127 \x7F \177 символ возврата (DEL) ≠0 0 0 0 0 0 0 0 0 0 0 0