字符串分割(C++)

本文介绍了一种使用C++标准库函数strtok进行字符串分割的方法。通过示例代码展示如何将一个字符串按特定分隔符分割成多个子串,并存入vector容器中。此方法适用于需要对文本进行初步解析的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

论坛问来的字符串分割代码,值得借鉴。

vector<string> vec;
    char strText[] = "what a nice day!";
    char seps[] = " ";
    char* token = strtok(strText, seps);
    string str;
    while(NULL != token)
    {
        str = token;
        vec.push_back(str);
        token = strtok(NULL, seps);
    }


### C++ 中实现字符串分割的方法 在 C++ 编程中,可以通过多种方式来实现字符串分割功能。以下是几种常见的方法及其对应的示例代码。 #### 方法一:使用 `std::istringstream` 实现字符串分割 通过 `std::istringstream` 类可以从输入流中逐部分提取数据,从而完成字符串分割操作。这种方法简单易懂且不需要引入额外的第三方库。 ```cpp #include <iostream> #include <sstream> #include <vector> #include <string> using namespace std; vector<string> split_with_istringstream(const string& str, char delimiter) { vector<string> result; istringstream iss(str); string token; while (getline(iss, token, delimiter)) { result.push_back(token); } return result; } int main() { string input = "apple-orange-banana"; char delimiter = '-'; vector<string> tokens = split_with_istringstream(input, delimiter); for (const auto& token : tokens) { cout << token << endl; } return 0; } ``` 此方法利用了标准库中的 `std::istringstream` 和 `std::getline()` 函数[^3]。 --- #### 方法二:使用 `strtok_r` 进行线程安全的字符串分割 如果需要在一个多线程环境中进行字符串分割,则推荐使用 POSIX 提供的线程安全版本函数 `strtok_r` 来替代传统的 `strtok`。 ```cpp #include <iostream> #include <cstring> using namespace std; int main() { char str[] = "Hello,World,How,Are,You"; const char delimiters[] = ","; char* context = nullptr; char* token = strtok_r(str, delimiters, &context); while (token != nullptr) { cout << token << endl; token = strtok_r(nullptr, delimiters, &context); } return 0; } ``` 上述代码展示了如何使用 `strtok_r` 对字符串按逗号分隔并逐一打印每个子串[^2]。 --- #### 方法三:借助 Boost 库实现更灵活的字符串分割 Boost 是一个广泛使用的开源 C++ 库集合,其中包含了强大的字符串处理工具。例如,可以使用 `boost::split` 轻松地依据多个分隔符对字符串进行切片。 ```cpp #include <iostream> #include <string> #include <vector> #include <boost/algorithm/string.hpp> using namespace std; int main() { string test = "i am a student,you are a teacher!"; vector<string> vec; boost::split(vec, test, boost::is_any_of(" ,"), boost::token_compress_on); for (size_t i = 0; i < vec.size(); ++i) { cout << vec[i] << endl; } return 0; } ``` 该方法允许一次性定义多个分隔符,并支持压缩连续空白字符的功能[^4]。 --- #### 总结 以上介绍了三种不同的 C++ 字符串分割技术,分别是基于标准库的 `std::istringstream`、POSIX 的 `strtok_r` 以及增强型第三方库 Boost 的解决方案。每种方案都有其适用场景和优缺点,在实际开发过程中可以根据具体需求选择合适的实现方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值