Open2

最長しりとり

cardboardcardboard

C++ での日本語の扱い

  • wstring を使う
  • ifstream は wifstream, istringstream は wistringstream に
  • おまじないが多い
    • locale
  • wcout を使う。 cout は使わない。
  • なんでこれでうまくいくのか分からない。
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <codecvt>

using namespace std;

int main()
{
    // wcout で出力されるようにするおまじない
    std::ios_base::sync_with_stdio(false);
    wcout.imbue(std::locale(""));
    std::locale utf8( std::locale(), new std::codecvt_utf8<wchar_t> );
    wcout.imbue(utf8);

    // csv の日本語を取り出せるようにするおまじない
    wifstream wifs("csv_file_name");
    wifs.imbue(utf8);

    wstring line;
    while(getline(wifs, line)) {
        wistringstream wiss(line);
        // 処理;
    }

    return 0;
}