プログラミングの魔物

エラー、バグ、仕様変更と戦うブログ

C++マルチバイトの文字カウント

#include <locale>

size_t wlen(const char* str){
    int len = 0;
    for(; *str; len++){
        str += mblen(str, MB_CUR_MAX);
    }
    return len;
}

//wlenを使う前にロケールをセットしておく
setlocale(LC_CTYPE, "ja_JP.UTF-8");

std::string str = "123あああいいい";
std::cout << wlen(str.c_str()) << std::endl;   // 「9」

最初はwstringを使おうとしたが、変換などでやたらとバッファへの書き出しを要求されるのでやめた。
支障が出るようなら後でまた調べて変更する。

Objective-Cなら日本語もちゃんとカウントされるらしい。