C++でBoost使わずに文字列を分解する
boost::splitを使うと文字列をデリミタで分解してコンテナに格納することができるのだけど、boostが無い環境で同等の機能が欲しくなったので書いてみた。find_first_of()とsubstr()を使う。
void split(std::vector<std::string> &v, const std::string &input_string, const std::string &delimiter) { std::string::size_type index = input_string.find_first_of(delimiter); if (index != std::string::npos) { v.push_back(input_string.substr(0, index)); split(v, input_string.substr(index + 1), delimiter); } else { v.push_back(input_string); } } int main(int argc, const char * argv[]) { std::string input_string, delimiter; std::vector<std::string> v; std::cout << "input string to split: "; std::cin >> input_string; std::cout << "specify delimiter: "; std::cin >> delimiter; split(v, input_string, delimiter); for (auto &s : v) { std::cout << s << std::endl; } return 0; }
結果
input string to split: first,second,third,forth specify delimiter: , first second third forth
再帰で割りとシンプルに書けた。