C++程序 将字符串拆分为多个子字符串

C++程序 将字符串拆分为多个子字符串

C++中,我们需要将字符串拆分为多个子字符串的场景经常会遇到,本文将介绍这个问题的几种解决方案。我们将按照实现不同的方法进行讨论,通过示例代码进行说明。

方法一:使用C++ STL库

C++ STL库中提供了一个字符串处理函数split(),可以很方便地实现字符串拆分功能。示例代码如下:

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

using namespace std;

vector<string> split(const string &str, char delim) {
    vector<string> res;
    stringstream ss(str);
    string item;
    while (getline(ss, item, delim)) {
        res.push_back(item);
    }
    return res;
}

int main() {
    string s = "hello world, this is test";
    vector<string> res = split(s, ' ');
    for (auto &i : res) {
        cout << i << endl;
    }
    return 0;
}

方法二:使用C语言中的strtok函数

在C语言中,有一个很常用的字符串处理函数strtok()可以完成字符串拆分功能。示例代码如下:

#include <iostream>
#include <cstring>

using namespace std;

int main() {
    char s[] = "hello world, this is test";
    char *token = strtok(s, " ");
    while (token != NULL) {
        cout << token << endl;
        token = strtok(NULL, " ");
    }
    return 0;
}

方法三:手动实现拆分功能

手动实现字符串拆分功能虽然代码比较长,但是有助于理解拆分功能的实现过程。示例代码如下:

#include <iostream>
#include <vector>

using namespace std;

vector<string> split(const string &str, char delim) {
    vector<string> res;
    size_t prev_pos = 0, pos = 0;
    while ((pos = str.find(delim, pos)) != string::npos) {
        string tmp = str.substr(prev_pos, pos - prev_pos);
        res.push_back(tmp);
        prev_pos = ++pos;
    }
    res.push_back(str.substr(prev_pos, pos - prev_pos));
    return res;
}

int main() {
    string s = "hello world, this is test";
    vector<string> res = split(s, ' ');
    for (auto &i : res) {
        cout << i << endl;
    }
    return 0;
}

结论

本文介绍了三种不同的方法实现字符串拆分功能,分别是使用C++ STL库中的split()函数,使用C语言中的strtok()函数,手动实现拆分功能。实现方式不同,复杂度也不同,选择不同方法可以根据实际情况自行选择。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程

C++ 示例