C++字符串分割方法:strtok、STL与Boost解析

需积分: 0 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库,都可以有效地将一个字符串分割成多个子字符串。