std::ctype<CharT>::is, std::ctype<CharT>::do_is
提供: cppreference.com
<tbody>
</tbody>
| ヘッダ <locale> で定義
|
||
public: bool is(mask m, CharT c) const; |
(1) | |
public: const CharT* is(const CharT* low, const CharT* high, mask* vec) const; |
(2) | |
protected: virtual bool do_is(mask m, CharT c) const; |
(3) | |
protected: virtual const CharT* do_is(const CharT* low, const CharT* high, mask* vec) const; |
(4) | |
1,2) public メンバ関数。 最も派生したクラスの protected virtual メンバ関数
do_is を呼びます。3) 文字
c がマスク m によって分類されるかどうか調べます。4) 文字配列
[low, high) 内のすべての文字について、完全な分類マスク (例えばデフォルトのロケールにおける数字 '0' に対する digit|xdigit|alnum|print|graph) を識別し、そのマスクを vec の指す配列の対応する要素に格納します。引数
| c | - | 分類する文字 |
| m | - | 単一の文字を分類するために使用するマスク |
| low | - | 分類する文字の配列の最初の文字へのポインタ |
| high | - | 分類する文字の配列の最後の文字の次へのポインタ |
| vec | - | 埋めるマスクの配列の最初の要素へのポインタ |
戻り値
1,3)
c が m によって分類される場合は true。2,4)
high。例
Run this code
#include <locale>
#include <utility>
#include <vector>
#include <iostream>
// utility wrapper to make locale-bound facets destructible
template<class Facet>
struct deletable_facet : Facet
{
template<class ...Args>
deletable_facet(Args&& ...args) : Facet(std::forward<Args>(args)...) {}
~deletable_facet() {}
};
int main()
{
// classify a single character using the default locale
auto& f = std::use_facet<std::ctype<char>>(std::locale());
char c = '0';
if (f.is(std::ctype_base::digit, c)) // or isdigit(c, locale());
{
std::cout << "'" << c << "' is a digit\n";
}
// classify every character in a string using a named locale
deletable_facet<std::ctype_byname<wchar_t>> f2("en_US.utf8");
std::wstring str = L"z\u00df\u6c34\U0001d10b";
std::vector<std::ctype_base::mask> vec(str.size());
f2.is(&str[0], &str[0] + str.size(), &vec[0]);
for (std::size_t n = 0; n < str.size(); ++n) {
std::cout << std::hex << "U+" << str[n] << " is: ";
if (vec[n] & std::ctype_base::alnum)
std::cout << " alnum ";
if (vec[n] & std::ctype_base::punct)
std::cout << " punct ";
std::cout << '\n';
}
}
出力:
'0' is a digit
U+7a is: alnum
U+df is: alnum
U+6c34 is: alnum
U+1d10b is: punct
関連項目
| 分類テーブルを用いて、文字を分類します ( std::ctype<char>のパブリックメンバ関数)
| |
| 指定された LC_CTYPE カテゴリに従ってワイド文字を分類します (関数) |