C++で日本語文字列を切り取りたい


C++11を用いて日本語の文字列の入力を受け取り、それ各文字ごとに切り抜いて数を数えるプログラムを作成しているのですが、日本語を扱ったのは始めてなので知見が足りません、できればstringにrange_based_forを書けたときのようにスラスラ取りたいです。




[`std::string` / `std::wstring` / `std::u16string` /
`std::u32string`](https://cpprefjp.github.io/reference/string/basic_string.html)
が用意されていますが、それぞれは対応する文字型（`char`など）を扱うとしか定められていません。例えば、C標準ライブラリには`stricmp`のような大文字小文字を区別しない比較が存在しますが、C++
stringにはこのような機能すらありません。  
全てはライブラリ利用者に任せられているため、マルチバイト文字になるのであればその管理もライブラリ利用者の責任です。`std::u16string`を使用することでUTF-16を扱うことができますが、その場合でも[サロゲートペア](https://ja.wikipedia.org/wiki/Unicode#%E3%82%B5%E3%83%AD%E3%82%B2%E3%83%BC%E3%83%88%E3%83%9A%E3%82%A2)の管理は利用者の責任ですし、`std::u32string`でUTF-32としたとしてもやはり[異体字セレクタ](https://ja.wikipedia.org/wiki/%E7%95%B0%E4%BD%93%E5%AD%97%E3%82%BB%E3%83%AC%E3%82%AF%E3%82%BF)などを考慮するとやはり１文字に収まることはありません。

結局のところ、何をもって「１文字」とみなすかは利用者次第であり、それに応じた処理を記述しすることになります。

