📜  c++ string split - C++ (1)

📅  最后修改于: 2023-12-03 15:13:57.259000             🧑  作者: Mango

C++ String Split

在C++中,如果我们需要将一个字符串按照特定的分隔符拆分成若干个子字符串,该怎么做呢?本文将为大家介绍几种常用的方法。

方法一:使用STL的stringstream

使用STL的stringstream,我们可以将字符串转换成流,并使用>>运算符从流中读取数据,这样就能够实现字符串的拆分。

#include <iostream>
#include <sstream>
#include <vector>

std::vector<std::string> split(std::string str, char delimiter) {
    std::vector<std::string> result;
    std::stringstream ss(str);
    std::string token;

    while (getline(ss, token, delimiter)) {
        result.push_back(token);
    }

    return result;
}

int main() {
    std::string str = "hello,world,how,are,you";
    char delimiter = ',';

    std::vector<std::string> tokens = split(str, delimiter);

    for (auto it = tokens.begin(); it != tokens.end(); it++) {
        std::cout << *it << std::endl;
    }

    return 0;
}

以上代码将输出如下结果:

hello
world
how
are
you
方法二:使用C标准库的strtok函数

C标准库提供了一个名为strtok的函数,它可以将字符串按照特定的分隔符拆分成若干个子字符串。

#include <iostream>
#include <cstring>
#include <vector>

std::vector<std::string> split(std::string str, char delimiter) {
    std::vector<std::string> result;
    char* token = strtok(str.data(), &delimiter);

    while (token != nullptr) {
        result.push_back(token);
        token = strtok(nullptr, &delimiter);
    }

    return result;
}

int main() {
    std::string str = "hello,world,how,are,you";
    char delimiter = ',';

    std::vector<std::string> tokens = split(str, delimiter);

    for (auto it = tokens.begin(); it != tokens.end(); it++) {
        std::cout << *it << std::endl;
    }

    return 0;
}

以上代码将输出如下结果:

hello
world
how
are
you

需要注意的是,strtok函数会修改原字符串,使用时需谨慎。

方法三:使用Boost库的split函数

Boost库是一个功能强大的C++库,它提供了很多实用的工具。我们可以使用Boost库的split函数来拆分字符串。

#include <iostream>
#include <vector>
#include <boost/algorithm/string.hpp>

std::vector<std::string> split(std::string str, char delimiter) {
    std::vector<std::string> result;
    boost::split(result, str, boost::is_any_of(std::string(1, delimiter)), boost::token_compress_on);

    return result;
}

int main() {
    std::string str = "hello,world,how,are,you";
    char delimiter = ',';

    std::vector<std::string> tokens = split(str, delimiter);

    for (auto it = tokens.begin(); it != tokens.end(); it++) {
        std::cout << *it << std::endl;
    }

    return 0;
}

以上代码将输出如下结果:

hello
world
how
are
you

需要注意的是,使用Boost库需要预先安装并链接库文件。

总结

以上几种方法各有优劣,根据具体情况选择合适的方法即可。C++中还有很多实用的STL函数,可以大大提高我们的编程效率,希望大家在平时的工作中能够多多利用。