📜  c++ 用逗号分割字符串 - C++ (1)

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

C++ 用逗号分割字符串

在C++中,用逗号分割字符串是一项常见的任务,例如将一个逗号分隔的字符串拆分成一个字符串数组。本文将介绍几种实现方法。

方法一:使用stringstream

stringstream是C++标准库中的一种输入输出流,它可以像cin和cout一样进行输入和输出操作。我们可以利用stringstream来实现逗号分割字符串的功能。

#include <iostream>
#include <string>
#include <sstream>
#include <vector>
using namespace std;

vector<string> split(string str, char delimiter) {
    vector<string> res;
    stringstream ss(str);
    string token;
    while (getline(ss, token, delimiter)) {
        res.push_back(token);
    }
    return res;
}

int main() {
    string str = "hello,world,from,cpp";
    vector<string> res = split(str, ',');
    for (auto s : res) {
        cout << s << endl;
    }
    return 0;
}

上述代码中,我们首先定义了一个split函数,它的参数是一个字符串和一个分隔符(这里是逗号),函数的返回值是一个字符串向量(相当于字符串数组)。

在函数内部,我们使用stringstream定义了一个输入流ss,并将输入字符串str传入其中。然后使用getline函数从输入流中读取字符串,每次读取到分隔符时就将当前的字符串加入到结果向量中。

最后,我们在主函数中调用split函数并打印输出结果。

方法二:使用strtok函数

另一种实现方法是使用C标准库中的strtok函数。

#include <iostream>
#include <cstring>
#include <vector>
using namespace std;

vector<string> split(const char* str, char delimiter) {
    vector<string> res;
    char* token = strtok(const_cast<char*>(str), &delimiter);
    while (token) {
        res.push_back(token);
        token = strtok(NULL, &delimiter);
    }
    return res;
}

int main() {
    const char* str = "hello,world,from,cc";
    vector<string> res = split(str, ',');
    for (auto s : res) {
        cout << s << endl;
    }
    return 0;
}

在上述代码中,我们首先定义了一个split函数,它的参数是一个C风格的字符串和一个分隔符,函数的返回值是一个字符串向量。

在函数内部,我们使用strtok函数定义了一个token指针,并将输入字符串传入其中。然后使用while循环来遍历整个字符串,每次读取到分隔符时就将当前的字符串加入到结果向量中。

最后,我们在主函数中调用split函数并打印输出结果。

需要注意的是,在使用strtok函数时需要使用const_cast来进行类型转换,否则会编译错误。

方法三:使用boost库

如果我们需要更加高效和灵活的字符串操作,可以使用Boost库。Boost库是一个C++库的集合,拥有跨平台、高效和灵活等特性。

#include <iostream>
#include <boost/algorithm/string.hpp>
#include <vector>
using namespace std;
using namespace boost::algorithm;

vector<string> split(string str, char delimiter) {
    vector<string> res;
    split(res, str, is_any_of(string(1, delimiter)), token_compress_on);
    return res;
}

int main() {
    string str = "hello,world,from,cc";
    vector<string> res = split(str, ',');
    for (auto s : res) {
        cout << s << endl;
    }
    return 0;
}

在上述代码中,我们使用了Boost库中的split函数来实现字符串的逗号分割。在函数中,我们首先定义了一个结果向量res,并使用split函数将输入字符串str按照指定的分隔符拆分成若干个字符串。

split函数的第二个参数是输入字符串,第三个参数是分隔符(这里使用了is_any_of函数和string(1, delimiter)),第四个参数是选项(token_compress_on表示去掉连续的分隔符,例如"a,,b"会被拆分成"a", "b")。

最后,我们在主函数中调用split函数并打印输出结果。

需要注意的是,在使用Boost库时需要在编译时加上-lboost_system -lboost_filesystem选项。

以上就是三种在C++中用逗号分割字符串的实现方法,你可以根据自己的需要选择其中的一种。