wstringというクラスを使う。
代入の時にはL"xxx"とする。
cygwin ではwstringだとコンパイルできないので std::basic_string
http://www.geocities.co.jp/bleis_tift/cpp/string.html
http://others2.blog.so-net.ne.jp/2010-09-24
http://wisdom.sakura.ne.jp/programming/c/c63.html
たしかめ
$locale
LANG=ja_JP.UTF-8
LC_CTYPE="ja_JP.UTF-8"
LC_NUMERIC="ja_JP.UTF-8"
LC_TIME="ja_JP.UTF-8"
LC_COLLATE="ja_JP.UTF-8"
LC_MONETARY="ja_JP.UTF-8"
LC_MESSAGES="ja_JP.UTF-8"
LC_ALL=
int main(){ setlocale(LC_CTYPE,""); std::basic_string<wchar_t> v; std::string v2; v=L"おはよう"; v2="おはよう"; wcout <<L"wstring:"<<v <<L" 一文字目: "<<v[0] <<L"長さ:" <<v.length() <<L"\n"; cout <<"string:"<<v2 <<" 一文字目: "<<v2[0] <<"長さ:" <<v2.length() <<"\n"; }
出力結果:
wstring:おはよう 一文字目: お長さ:4
string:おはよう 一文字目: ▒長さ:12
http://d.hatena.ne.jp/nagardjunas/20110524/1306231384
http://blog.livedoor.jp/love0hate/archives/1364685.html
ファイル読み込み
入力ファイル test.txt
おはようこんにちはたろう
test
たぬき
#include <iostream> #include <locale> #include <vector> #include <string> #include<stdlib.h> #include<fstream> using namespace std; int main(){ setlocale(LC_CTYPE,""); std::basic_string<wchar_t> str; std::wifstream ifs("test.txt"); while(getline(ifs,str)){ wcout << str <<L"3文字目:"<< str[2] <<"\n"; } }
おはようこんにちはたろう3文字目:よ
test3文字目:s
たぬき3文字目:き
$ cat test3.cpp #include <iostream> #include <locale> #include <vector> #include <string> #include<stdlib.h> #include<fstream> using namespace std; int main(){ setlocale(LC_CTYPE,""); std::basic_string<wchar_t> str; std::wifstream ifs("test.txt"); int j; while(getline(ifs,str)){ j= str.find(L"こわい"); if(j!=string::npos){ cout <<j<<"\n"; } //wcout << str <<L"3文字目:"<< str[2] <<"\n"; } }