C++字符串分割方法:strtok、STL与Boost解析
本文主要介绍了在C++编程中如何进行字符串分割,包括使用`strtok`函数、STL中的`find`和`substr`函数,以及Boost库的方法。 一、`strtok`函数进行字符串分割 `strtok`是C++标准库中用于分割字符串的函数,它能够将一个字符串按照指定的分隔符切割成多个子字符串。函数原型如下: ```cpp char* strtok(char* str, const char* delim); ``` - `str`:需要分割的原始字符串。 - `delim`:定义分隔符的字符串,可以包含多个字符。 `strtok`函数会返回一个指向分割出来的子字符串的指针,直到所有子字符串都被提取完后返回`NULL`。下面是一个简单的示例: ```cpp #include <string.h> #include <stdio.h> int main() { char s[] = "GoldenGlobalView,disk*desk"; const char* d = ",*"; char* p; p = strtok(s, d); while (p) { printf("%s\n", p); p = strtok(NULL, d); } return 0; } ``` 二、STL进行字符串分割 使用STL(Standard Template Library)的`string`类提供的`find`和`substr`函数也可以实现字符串分割。这两个函数分别用于查找子字符串的位置和获取子字符串。 1. `find`函数 `find`函数用于在字符串中查找指定子字符串首次出现的位置,其原型为: ```cpp size_t find(const string& str, size_t pos = 0) const; ``` - `str`:要查找的子字符串。 - `pos`:搜索的起始位置(默认从0开始)。 如果找到子字符串,返回其开始位置;否则,返回`string::npos`。 2. `substr`函数 `substr`函数用于获取字符串的一部分,其原型为: ```cpp string substr(size_t pos = 0, size_t n = npos) const; ``` - `pos`:子字符串的起始位置(默认从0开始)。 - `n`:要获取的字符数(默认为`npos`,表示到字符串末尾)。 以下是一个使用`find`和`substr`进行字符串分割的例子: ```cpp #include <string> #include <vector> #include <iostream> std::vector<std::string> split(const std::string& str, const std::string& pattern) { std::vector<std::string> result; str += pattern; // 扩展字符串以方便操作 int size = str.size(); for (int i = 0; i < size; i++) { auto pos = str.find(pattern, i); if (pos != str.npos) { std::string subStr = str.substr(i, pos - i); result.push_back(subStr); i = pos + pattern.size() - 1; } } return result; } int main() { std::string str = "GoldenGlobalView,disk*desk"; std::string pattern = ",*"; std::vector<std::string> parts = split(str, pattern); for (const auto& part : parts) { std::cout << part << std::endl; } return 0; } ``` 三、Boost库进行字符串分割 Boost库提供了一种更高级的字符串分割方法,可以使用`boost::tokenizer`或`boost::algorithm::split`函数。例如,使用`boost::algorithm::split`: ```cpp #include <boost/algorithm/string.hpp> #include <vector> #include <iostream> #include <string> int main() { std::string str = "GoldenGlobalView,disk*desk"; std::vector<std::string> parts; boost::algorithm::split(parts, str, boost::is_any_of(",*")); for (const auto& part : parts) { std::cout << part << std::endl; } return 0; } ``` 以上就是C++中进行字符串分割的几种常见方法,根据实际需求可以选择适合的工具和库来处理字符串。无论是使用`strtok`,还是STL,或是Boost库,都可以有效地将一个字符串分割成多个子字符串。
下载后可阅读完整内容,剩余3页未读,立即下载
- 粉丝: 26
- 资源: 298
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Hadoop生态系统与MapReduce详解
- MDS系列三相整流桥模块技术规格与特性
- MFC编程:指针与句柄获取全面解析
- LM06:多模4G高速数据模块,支持GSM至TD-LTE
- 使用Gradle与Nexus构建私有仓库
- JAVA编程规范指南:命名规则与文件样式
- EMC VNX5500 存储系统日常维护指南
- 大数据驱动的互联网用户体验深度管理策略
- 改进型Booth算法:32位浮点阵列乘法器的高速设计与算法比较
- H3CNE网络认证重点知识整理
- Linux环境下MongoDB的详细安装教程
- 压缩文法的等价变换与多余规则删除
- BRMS入门指南:JBOSS安装与基础操作详解
- Win7环境下Android开发环境配置全攻略
- SHT10 C语言程序与LCD1602显示实例及精度校准
- 反垃圾邮件技术:现状与前景