C++字符串分割方法:strtok、STL与Boost解析
需积分: 0 57 浏览量
更新于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 浏览量
2023-07-28 上传
2023-09-08 上传
2023-09-02 上传
2023-08-22 上传
2023-06-13 上传
2023-09-20 上传
家的要素
- 粉丝: 29
- 资源: 298
最新资源
- tvovjddjjx
- WP Strona Startowa-crx插件
- ynwitter-clone:ynwitter-clone
- wufei:异步Kuberenetes命名空间日志记录器流媒体
- Accuinsight-1.0.30-py2.py3-none-any.whl.zip
- auto-update-action:测试gh操作自动更新存储库文件
- 基于PHP的最新苍穹影视V20七彩视界免授权开源源码.zip
- documentation:即插即用堆栈,用于从用户角度测试和监视Web应用程序
- Kubbo跟踪:Kubbo跟踪
- jsonserver::rocket:描述您的数据,自动获得带有随机值的伪造的REST&GraphQL API。或instantly立即获得假服务器
- aabbtree-2.6.1-py2.py3-none-any.whl.zip
- 轻量级指示器控件LBProgressHUD
- 基于PHP的最新精仿爱美眉美女图片程序源码.zip
- 子程序调用指令的应用举例.rar
- flashcard:抽认卡应用(Anki替代品)
- 日历模板:vanilajs日历模板