📜  在 C++ 中实现拆分功能(1)

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

在 C++ 中实现拆分功能

在 C++ 中,拆分字符串是一个常见的需求,可以通过一些简单的方法实现。

方法一:使用 std::stringstream

使用 std::stringstream 类可以很方便地将一个字符串拆分成多个子字符串。代码实现如下:

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

std::vector<std::string> split(const std::string& s, char delim) {
    std::vector<std::string> result;
    std::stringstream ss(s);
    std::string item;
    while (std::getline(ss, item, delim)) {
        result.push_back(item);
    }
    return result;
}

int main() {
    std::string s = "hello,world";
    std::vector<std::string> v = split(s, ',');
    for (const std::string& item : v) {
        std::cout << item << std::endl;
    }
    return 0;
}

以上代码中,我们定义了一个 split 函数,该函数输入一个字符串 s 和一个分隔符 delim,并返回一个 std::vector<std::string> 类型的数组,其中每个元素是输入字符串中的一个子字符串。主函数中,我们将字符串 "hello,world" 按照逗号分隔后输出。

方法二:使用 std::string 的成员函数

C++ 中的 std::string 类型提供了一些方便拆分字符串的成员函数,如 findsubstr。代码实现如下:

#include <iostream>
#include <string>
#include <vector>

std::vector<std::string> split(const std::string& s, char delim) {
    std::vector<std::string> result;
    std::string::size_type pos = 0, last_pos = 0;
    while ((pos = s.find(delim, last_pos)) != std::string::npos) {
        result.push_back(s.substr(last_pos, pos - last_pos));
        last_pos = pos + 1;
    }
    result.push_back(s.substr(last_pos));
    return result;
}

int main() {
    std::string s = "hello,world";
    std::vector<std::string> v = split(s, ',');
    for (const std::string& item : v) {
        std::cout << item << std::endl;
    }
    return 0;
}

在以上代码中,我们同样定义了一个 split 函数,并使用 find 函数查找字符串中的分隔符位置,使用 substr 函数获取子字符串。注意在最后需要将剩余的字符串作为最后一个子字符串加入数组中。

总结

以上两种方法都可以很好地实现字符串拆分功能。在实际开发中,可以根据场景选择不同的实现方式,对于小规模的字符串拆分,可以考虑使用 std::string 的成员函数;若是大规模的字符串拆分,使用 std::stringstream 类应该更为高效。