1 C++根据给定分隔符分割字符串

在对字符串处理的一些简单场景中,需要根据分隔符将字符串进行分割,比如将“1920x1080”根据“x”分割为1920和1080,将"Hello World"根据空格分割为Hello和World。

std标准库没有现成的方法可以调用,不过我们可以自己造一个简单的轮子,我们将字符串根据给定的分隔符进行分割,并将结果保存到一个std::vector<std::string>中,以下是示例代码

#include <iostream>
#include <vector>

static void split(const std::string& str, const std::string& sp, std::vector<std::string>& vec)
{
    size_t size = sp.size();

    vec.clear();
    size_t end = 0, start = 0;
    while (start != std::string::npos && start < str.size())
    {
        end = str.find(sp, start);
        vec.push_back(str.substr(start, end - start)); // end == 0 时压入空字符串
        start = end == std::string::npos ? end : end + size;
    }

    if (vec.empty())
        vec.push_back(str);
}


int main()
{
    std::string origin_str = "1920x1080";
    std::vector<std::string> split_vec;

    split(origin_str, "x", split_vec);

    for (int i = 0; i < split_vec.size(); ++i)
    {
        std::cout << split_vec[i] << std::endl;
    }

    return 0;
}

输出

1920
1080