C++ snippet - string split 하기

smpl published on
1 min, 138 words

문자열을 특정한 글자나 문자열로 분할해야 하는 경우는 자주 마주치는데, C++에서는 이 기본적인 기능이 표준 라이브러리에서 제공되지 않기 때문에 직접 구현하여 써야 한다.

어려운 일은 아니지만 그 때 그 때 만들기에는 번거롭기 때문에, 편리하게 간단한 snippet을 만들어 둔다.

상황에 따라 조금씩 고쳐야 하는 경우도 있긴 할 것이다.

문자로 분할하기

std::vector <std::string> tokenize(const std::string& str, char delim) {
    std::vector<std::string> ret;
    std::stringstream ss(str);
    std::string token;
    for (;;) {
        if (!std::getline(ss, token, delim)) {
            ret.emplace_back("");
            break;
        }

        ret.emplace_back(token);
    }
    return ret;
}

문자열로 분할하기

std::vector<std::string> tokenize(const std::string& str, const std::string& delim) {
    std::vector<std::string> ret;
    size_t cur = 0;
    for (;;) {
        if (cur >= str.size()) {
            ret.emplace_back("");
            break;
        }
        const auto next = str.find_first_of(delim, cur);

        ret.emplace_back(str.substr(cur, next - cur));
        
        if (next == std::string::npos)
            break;
        cur = next + delim.size();
    }

    return ret;
}