◐ Shell
clean mode source ↗

std::ispunct — cppreference.com

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

<tbody> </tbody>

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

int ispunct( int ch );

Проверяет, является ли данный символ символом пунктуации, классифицированным текущей локалью C. Локаль C по умолчанию классифицирует символы !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ как символы пунктуации.

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

Параметры

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

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

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

Примечание

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

bool my_ispunct(char ch)
{
    return std::ispunct(static_cast<unsigned char>(ch));
}

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

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

Пример

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

int main()
{
    unsigned char c = '\xd7'; // символ × (знак умножения) в ISO-8859-1

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

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

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

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