C++字符串分割方法:strtok、STL与Boost解析
需积分: 0 106 浏览量
更新于2024-08-05
收藏 108KB PDF 举报
本文主要介绍了在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库,都可以有效地将一个字符串分割成多个子字符串。
2020-12-25 上传
114 浏览量
2022-09-22 上传
2022-09-24 上传
2021-10-03 上传
2022-09-20 上传
2022-02-08 上传
2023-04-20 上传
2023-07-28 上传
家的要素
- 粉丝: 29
- 资源: 298
最新资源
- JHU荣誉单变量微积分课程教案介绍
- Naruto爱好者必备CLI测试应用
- Android应用显示Ignaz-Taschner-Gymnasium取消课程概览
- ASP学生信息档案管理系统毕业设计及完整源码
- Java商城源码解析:酒店管理系统快速开发指南
- 构建可解析文本框:.NET 3.5中实现文本解析与验证
- Java语言打造任天堂红白机模拟器—nes4j解析
- 基于Hadoop和Hive的网络流量分析工具介绍
- Unity实现帝国象棋:从游戏到复刻
- WordPress文档嵌入插件:无需浏览器插件即可上传和显示文档
- Android开源项目精选:优秀项目篇
- 黑色设计商务酷站模板 - 网站构建新选择
- Rollup插件去除JS文件横幅:横扫许可证头
- AngularDart中Hammock服务的使用与REST API集成
- 开源AVR编程器:高效、低成本的微控制器编程解决方案
- Anya Keller 图片组合的开发部署记录