C++字符串分割:strtok、STL与Boost实例解析

版权申诉
5星 · 超过95%的资源 4 下载量 157 浏览量 更新于2024-09-11 收藏 59KB PDF 举报
“C++常用字符串分割方法实例汇总,涵盖了strtok函数、STL和Boost等不同方法,适用于C++开发中的字符串处理需求。” 在C++编程中,处理字符串是一项常见的任务,而字符串分割则是其中的关键操作。本篇文章汇总了C++中几种常见的字符串分割方法,以供开发者参考和使用。 一、strtok函数 strtok函数是C++标准库中用于字符串分割的函数,其原型为`char*strtok(char*str, const char*delim);`。它将一个字符串按照指定的分隔符切割成多个子串。str是待分割的原始字符串,delim是分隔符字符串。函数返回从str开始的每个被分割的子串,直到没有可分割的子串时返回NULL。需要注意的是,strtok函数在多线程环境下可能存在线程安全问题,因此在需要线程安全的场景下,推荐使用strtok_r作为替代。 以下是一个使用strtok的示例代码: ```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,标准模板库)提供了更现代且灵活的方式来处理字符串分割。主要利用`std::string`类的`find`和`substr`函数。 1. `find`函数:用于查找子字符串在原字符串中首次出现的位置。原型为`size_t find(const string& str, size_t pos=0) const;`,返回值为子字符串的起始位置,如果未找到则返回`string::npos`。 2. `substr`函数:用于提取原字符串的一部分,形成新的子字符串。原型为`string substr(size_t pos=0, size_t n=npos) const;`,其中pos是子字符串的起始位置,n是子字符串的长度。 基于这两个函数,我们可以自定义一个字符串分割函数,如下所示: ```cpp #include <string> #include <vector> std::vector<std::string> split(std::string str, std::string pattern) { std::string::size_type pos; std::vector<std::string> result; pos = str.find(pattern); while (pos != std::string::npos) { result.push_back(str.substr(0, pos)); str = str.substr(pos + pattern.size()); pos = str.find(pattern); } if (!str.empty()) { result.push_back(str); } return result; } ``` 三、Boost库方法 Boost库提供了更高级的字符串处理工具,例如`boost::tokenizer`,它提供了一种更方便的方式来分割字符串。`boost::tokenizer`允许用户自定义分隔符,并且支持迭代器接口,使得遍历分割结果更为直观。 ```cpp #include <boost/tokenizer.hpp> #include <iostream> #include <string> int main() { std::string s = "GoldenGlobalView,disk*desk"; boost::tokenizer<> tok(s, boost::char_separator<char>(" *,")); for (boost::tokenizer<>::iterator it = tok.begin(); it != tok.end(); ++it) { std::cout << *it << std::endl; } return 0; } ``` 以上就是C++中常用的字符串分割方法,包括传统的strtok函数、STL提供的find和substr组合以及Boost库的tokenizer。每种方法都有其适用的场景,开发者可以根据实际需求选择合适的方法来处理字符串。理解并掌握这些方法,能够有效提高C++编程中处理字符串的效率和灵活性。