最近、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; }
こういうのはすぐにパッと書けないといけないのに、思ったよりも時間がかかってしまった。