ゲームが作れるようになるまでがんばる日記

ゲーム制作のことを中心にゲームに関することを書いています

std::string には split が無い

最近、paizaのスキルチェック問題で文字列処理をC#で書いていたので、久しぶりにC++で書こうとしてけっこう戸惑った。
ある文字列を特定の文字で区切って分割するという処理で、C#ならば、String.Splitメソッドで簡単に書ける。

string s = "test1-test2-test3";
string[] subs = s.Split('-');

同じようにC++でも書こうとしたが、std::string には Split のような文字列分割関数が無かった。
なので、findとsubstrを使って書いた。

string s = "test1-test2-test3";
string::size_type offset = 0; 
while(1) {
    auto pos = s.find('-', offset);
    if(pos == std::string::npos) {
        cout << s.substr(offset);
        break;
    }
    cout << s.substr(offset, pos-offset) << endl;
    offset = pos + 1;
}

こういうのはすぐにパッと書けないといけないのに、思ったよりも時間がかかってしまった。