考えられる解決策は実際には2つだけです。wchar_t
これを長距離で頻繁に行う場合は、 (またはint32_t
、または、または最も適切なものを使用して、文字を単一の要素エンコーディングに変換することをお勧めします。これは、各個人を変換する単純なコピーではありませんchar
。ターゲットタイプに変換しますが、マルチバイト文字を認識して単一の要素に変換する真の変換関数です。
n
たまに使用したり、シーケンスを短くしたりする場合は、バイトを進めるための独自の関数を作成することができます。UTF-8の場合、次を使用します。
inline size_t
size(
Byte ch )
{
return byteCountTable[ ch ] ;
}
template< typename InputIterator >
InputIterator
succ(
InputIterator begin,
size_t size,
std::random_access_iterator_tag )
{
return begin + size ;
}
template< typename InputIterator >
InputIterator
succ(
InputIterator begin,
size_t size,
std::input_iterator_tag )
{
while ( size != 0 ) {
++ begin ;
-- size ;
}
return begin ;
}
template< typename InputIterator >
InputIterator
succ(
InputIterator begin,
InputIterator end )
{
if ( begin != end ) {
begin = succ( begin, end, size( *begin ),
std::::iterator_traits< InputIterator >::iterator_category() ) ;
}
return begin ;
}
template< typename InputIterator >
size_t
characterCount(
InputIterator begin,
InputIterator end )
{
size_t result = 0 ;
while ( begin != end ) {
++ result ;
begin = succ( begin, end ) ;
}
return result ;
}