wstring,string,wchar,char間の変換(C++)
再びc++での文字列処理の話。
c++めんどい(´・ω・`)
(2013/12/28)
長らく放置してましたが、結構アクセス数多いので追記。
wstring使うより、pficommonというライブラリをいれてustringを使うのをオススメします。stringを使うのと何も変わらず使えるので。
pficommonは他にも色々便利なので、ぜひ入れてみて下さい。
pficommon : http://pfi.github.io/pficommon/
■wchar <-> charの変換
mbstowcs, wcstombsを使う。
wchar_t *wc; const char c[] = "あいうえお"; mbstowcs(wc, c, sizeof(c));
■char <-> stringの変換
string -> char* : c_str()を使う。
char* -> string : = で変換可能
string str; const char *c = str.c_str(); string str2 = c; //※cが空だと、この書き方はsegmentation faultになるので注意!
■string <-> wstringの変換
んー(´・ω・`)
この方のモジュールを使用しました
http://d.hatena.ne.jp/kryozahiro/20080809/1218295912
■まとめ(wstringをmecabにつっこむ)
やりたかったのは、wstring型の文字列を、mecabに突っ込む(引数はchar型、結果もchar)の後に、結果をstring型に変換、という操作でした。
int main (int argc, char **argv) { setlocale( LC_CTYPE, "ja_JP.UTF-8"); wstring inputwstr = L"太郎は次郎が持っている本を花子に渡した。"; const wchar_t *inputw =inputwstr.c_str(); char input[1024]; wcstombs(input, inputw, sizeof(wchar_t)*int(inputwstr.size())); std::cout << "INPUT: " << input << std::endl; MeCab::Tagger *tagger = MeCab::createTagger(""); const char *result = tagger->parse(input); string resultstr = result; std::cout << "RESULT: " << resultstr << std::endl; delete tagger; return 0; }
これでokです。
これで文字列で困る事はなくなった…ような。