The Wayback Machine - https://web.archive.org/web/20230728232934/https://ja.cppreference.com/w/cpp/string/char_traits
名前空間
変種
操作

std::char_traits

提供: cppreference.com
< cpp‎ | string
ヘッダ <string> で定義
template<

    class CharT

>class char_traits;

char_traits クラスは指定された文字型のための基本文字および文字列操作を抽象化する特性クラステンプレートです。 定義された操作の集合はそれによって汎用のアルゴリズムをほとんど常に実装できるようなものです。 そのため、カスタマイズされた char_traits クラスを提供するだけで、ほとんどあらゆる可能な文字または文字列型でそのようなアルゴリズムを使用することができます。

char_traits クラステンプレートは明示的な実体化のための基礎として提供されます。 ユーザは任意のカスタム文字型に対して特殊化を提供することができます。 標準の文字型に対していくつかの特殊化が定義されます。

特性の操作が例外を投げる場合、動作は未定義です。

目次

[編集]標準の特殊化

標準の特殊化のメンバ typedef は以下の通りです。

特殊化 char_typeint_typepos_type
std::char_traits<char>charintstd::streampos
std::char_traits<wchar_t>wchar_tstd::wint_tstd::wstreampos
std::char_traits<char16_t>(C++11)char16_tstd::uint_least16_tstd::u16streampos
std::char_traits<char32_t>(C++11)char32_tstd::uint_least32_tstd::u32streampos
std::char_traits<char8_t>(C++20)char8_tunsignedcharstd::u8streampos
メンバ型 定義 (すべての標準の特殊化に渡って同じです)
off_typestd::streamoff
state_typestd::mbstate_t
comparison_category(C++20)std::strong_ordering

標準の特殊化のメンバ関数のセマンティクスは以下のように定義されます。

特殊化 assigneqlteof
std::char_traits<char>=== (unsigned char に対して) < (unsigned char に対して) EOF
std::char_traits<wchar_t>===<WEOF
std::char_traits<char16_t>(C++11)===< 無効な UTF-16 コードポイント
std::char_traits<char32_t>(C++11)===< 無効な UTF-32 コードポイント
std::char_traits<char8_t>(C++20)===< 無効な UTF-8 コードポイント

char_traits クラステンプレートの標準の特殊化は CharTraits の要件を満たします。

[編集]メンバ型

定義
char_typeCharT
int_typechar_type のすべての値および EOF を保持できる整数型
off_type処理系定義
pos_type処理系定義
state_type処理系定義

[編集]メンバ関数

[静的]
文字を代入します
(パブリック静的メンバ関数)[edit]
[静的]
2つの文字を比較します
(パブリック静的メンバ関数)[edit]
[静的]
ある文字シーケンスを別の文字シーケンスに移動します
(パブリック静的メンバ関数)[edit]
[静的]
文字シーケンスをコピーします
(パブリック静的メンバ関数)[edit]
[静的]
2つの文字シーケンスを辞書的に比較します
(パブリック静的メンバ関数)[edit]
[静的]
文字シーケンスの長さを返します
(パブリック静的メンバ関数)[edit]
[静的]
文字シーケンス内の文字を探します
(パブリック静的メンバ関数)[edit]
[静的]
int_type を同等な char_type に変換します
(パブリック静的メンバ関数)[edit]
[静的]
char_type を同等な int_type に変換します
(パブリック静的メンバ関数)[edit]
[静的]
2つの int_type 値を比較します
(パブリック静的メンバ関数)[edit]
[静的]
eof 値を返します
(パブリック静的メンバ関数)[edit]
[静的]
文字が eof 値かどうか調べます
(パブリック静的メンバ関数)[edit]

[編集]

ユーザ定義の文字特性は大文字小文字を区別しない比較を提供するために使用することができます。

#include <string>#include <iostream>#include <cctype>   struct ci_char_traits :public std::char_traits<char>{staticchar to_upper(char ch){return std::toupper((unsignedchar) ch);}staticbool eq(char c1, char c2){return to_upper(c1)== to_upper(c2);}staticbool lt(char c1, char c2){return to_upper(c1)< to_upper(c2);}staticint compare(constchar* s1, constchar* s2, size_t n){while( n--!=0){if( to_upper(*s1)< to_upper(*s2))return-1;if( to_upper(*s1)> to_upper(*s2))return1;++s1;++s2;}return0;}staticconstchar* find(constchar* s, int n, char a){autoconst ua (to_upper(a));while( n--!=0){if(to_upper(*s)== ua)return s; s++;}return nullptr;}};   using ci_string =std::basic_string<char, ci_char_traits>;   std::ostream& operator<<(std::ostream& os, const ci_string& str){return os.write(str.data(), str.size());}   int main(){ ci_string s1 ="Hello"; ci_string s2 ="heLLo";if(s1 == s2)std::cout<< s1 <<" and "<< s2 <<" are equal\n";}

出力:

Hello and heLLo are equal

[編集]関連項目

文字の並びを格納および操作します
(クラステンプレート)[edit]
close