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
);
}
例
Run this code
#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
関連項目
| 指定されたロケールにおいて文字が句読点に分類されるかどうか調べます (関数テンプレート) | |
| ワイド文字が句読点文字かどうか調べます (関数) | |
ispunct の C言語リファレンス
| |
