文字列を二分割する

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()という名前を提案してもらい、カッコ良かったのでそれにしました。