std::ispunct - cppreference.com

std::ispunct

提供: cppreference.com
<tbody> </tbody>
ヘッダ <cctype> で定義
int ispunct( int ch );

現在の C のロケールによる分類において、指定された文字が句読点かどうか調べます。 デフォルトの C ロケールでは、 !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ が句読点として分類されます。

ch の値が unsigned char で表現できず、 EOF とも等しくない場合、動作は未定義です。

引数

ch - 分類する文字

戻り値

文字が句読点であれば非ゼロの値、そうでなければゼロ。

ノート

<cctype> の他のすべての関数と同様に、引数の値が unsigned char で表現できず、 EOF とも等しくない場合、 std::ispunct の動作は未定義です。 プレーンな 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)         // wrong
                      // [](int c){ return std::ispunct(c); }           // wrong
                      // [](char c){ return std::ispunct(c); }          // wrong
                         [](unsigned char c){ return std::ispunct(c); } // correct
                        );
}

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

int main()
{
    unsigned char c = '\xd7'; // the character × (multiplication sign) in ISO-8859-1

    std::cout << "ispunct(\'\\xd7\', default C locale) returned "
               << std::boolalpha << (bool)std::ispunct(c) << '\n';

    std::setlocale(LC_ALL, "en_GB.iso88591");
    std::cout << "ispunct(\'\\xd7\', ISO-8859-1 locale) returned "
              << std::boolalpha << (bool)std::ispunct(c) << '\n';
}

出力:

ispunct('\xd7', default C locale) returned false
ispunct('\xd7', ISO-8859-1 locale) returned true


関連項目

指定されたロケールにおいて文字が句読点に分類されるかどうか調べます
(関数テンプレート) [edit]
ワイド文字が句読点文字かどうか調べます
(関数) [edit]