split(s, delimiter)
だとs
の中にdelimiter
が2つ以上現れたらその数だけ分割されてしまうので、区切り文字を一度だけ認識し、二分割する関数を書きました。
#include <iostream> #include <string> #include <utility> #include <tuple> std::pair<std::string, std::string> bisect(const std::string& s, char delimiter) { std::size_t pos = s.find_first_of(delimiter); return std::make_pair( s.substr(0, pos), s.substr(pos + 1)); } int main() { std::string a, b; std::tie(a, b) = bisect("aaa:bbb", ':'); std::cout << a << std::endl; std::cout << b << std::endl; }
出力:
aaa bbb
はじめはsplit2()
という名前の関数にしようかと思っていたのですが、@dplusplusさんからbisect()
という名前を提案してもらい、カッコ良かったのでそれにしました。
@cpp_akira bisectではどうでしょうか。
— dplusplus (@dplusplus) April 14, 2014