◐ Shell
clean mode source ↗

std::isprint — cppreference.com

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

<tbody> </tbody>

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

int isprint( int ch );

Проверяет, является ли ch печатным символом, классифицированным текущей установленной локалью C. В локали по умолчанию "C" следующие символы являются печатными:

  • цифры (0123456789)
  • заглавные буквы (ABCDEFGHIJKLMNOPQRSTUVWXYZ)
  • строчные буквы (abcdefghijklmnopqrstuvwxyz)
  • знаки пунктуации (!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~)
  • пробел ( )

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

Параметры

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

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

Ненулевое значение, если символ можно напечатать, иначе ноль.

Примечание

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

bool my_isprint(char ch)
{
    return std::isprint(static_cast<unsigned char>(ch));
}

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

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

Пример

#include <cctype>
#include <clocale>
#include <iostream>
 
int main()
{
    unsigned char c = '\xa0'; // неразрывный пробел в ISO-8859-1
 
    std::cout << "isprint(\'\\xa0\', локаль C по умолчанию) возвращает "
              << std::boolalpha << (bool)std::isprint(c) << '\n';
 
    std::setlocale(LC_ALL, "en_GB.iso88591");
    std::cout << "isprint(\'\\xa0\', локаль ISO-8859-1) возвращает "
              << std::boolalpha << (bool)std::isprint(c) << '\n';
}

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

isprint('\xa0', локаль C по умолчанию) возвращает false
isprint('\xa0', локаль 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