首页 > 后端开发 > C++ > 正文

c++中如何分割一个字符串_c++字符串分割的多种实现方式

穿越時空
发布: 2025-10-15 10:16:01
原创
410人浏览过
C++中实现字符串分割的常用方法有四种:1. 使用std::stringstream结合getline,适合单一分隔符,简单易用;2. 利用std::string::find和substr,支持多字符分隔符,灵活性高;3. 借助<regex>进行正则分割,适用于复杂模式但性能开销较大;4. 手动遍历字符串,效率最高且可定制逻辑。根据实际需求选择合适方式,如分隔符类型、是否过滤空串及性能要求等。

c++中如何分割一个字符串_c++字符串分割的多种实现方式

在C++中,标准库没有提供像Python中split()这样直接的字符串分割函数,但可以通过多种方式实现字符串分割。以下是几种常见且实用的方法,适用于不同场景。

使用std::stringstream结合getline

这是最常用的方式之一,适合按单个分隔符(如空格、逗号)分割字符串。

示例代码:

<pre class="brush:php;toolbar:false;">#include <iostream><br>#include <vector><br>#include <string><br>#include <sstream><br><br>std::vector<std::string> split(const std::string& str, char delim) {<br>    std::vector<std::string> tokens;<br>    std::stringstream ss(str);<br>    std::string token;<br>    while (std::getline(ss, token, delim)) {<br>        tokens.push_back(token);<br>    }<br>    return tokens;<br>}<br><br>// 使用示例<br>int main() {<br>    std::string input = "apple,banana,orange";<br>    auto result = split(input, ',');<br>    for (const auto& s : result) {<br>        std::cout << s << std::endl;<br>    }<br>    return 0;<br>}
登录后复制

优点:简单易懂,适合处理文本行或CSV格式数据。
注意:连续分隔符会产生空字符串,若需过滤,可在push_back前判断!token.empty()

立即学习C++免费学习笔记(深入)”;

使用std::string::findsubstr

更灵活的方式,可处理多字符分隔符或自定义逻辑。

示例代码:

<pre class="brush:php;toolbar:false;">std::vector<std::string> splitByString(const std::string& str, const std::string& delim) {<br>    std::vector<std::string> tokens;<br>    size_t start = 0;<br>    size_t end = 0;<br>    while ((end = str.find(delim, start)) != std::string::npos) {<br>        tokens.push_back(str.substr(start, end - start));<br>        start = end + delim.length();<br>    }<br>    tokens.push_back(str.substr(start)); // 添加最后一段<br>    return tokens;<br>}
登录后复制

说明:可用于分割如"and"、"||"等多字符分隔符。
注意:若分隔符不在字符串中,仍会返回完整原串。

腾讯智影-AI数字人
腾讯智影-AI数字人

基于AI数字人能力,实现7*24小时AI数字人直播带货,低成本实现直播业务快速增增,全天智能在线直播

腾讯智影-AI数字人73
查看详情 腾讯智影-AI数字人

使用<regex>正则表达式分割

适合复杂分隔规则,例如多个空白字符、混合符号等。

示例代码:

<pre class="brush:php;toolbar:false;">#include <regex><br><br>std::vector<std::string> splitByRegex(const std::string& str, const std::string& pattern) {<br>    std::vector<std::string> tokens;<br>    std::regex re(pattern);<br>    std::sregex_token_iterator it(str.begin(), str.end(), re, -1);<br>    std::sregex_token_iterator end;<br>    while (it != end) {<br>        tokens.push_back(*it++);<br>    }<br>    return tokens;<br>}
登录后复制

使用示例:\s+按任意空白分割,或[,;]+按逗号分号分割。
注意:正则有一定性能开销,频繁调用时慎用。

手动遍历+条件判断

最高效的方式,适用于性能敏感场景或特殊规则(如忽略空段、保留引号内容等)。

<pre class="brush:php;toolbar:false;">std::vector<std::string> splitManual(const std::string& str, char delim) {<br>    std::vector<std::string> tokens;<br>    size_t start = 0;<br>    for (size_t i = 0; i <= str.size(); ++i) {<br>        if (i == str.size() || str[i] == delim) {<br>            if (i > start) { // 忽略空段<br>                tokens.push_back(str.substr(start, i - start));<br>            }<br>            start = i + 1;<br>        }<br>    }<br>    return tokens;<br>}
登录后复制

优点:控制力强,可跳过空字符串、处理转义字符等。
适用:解析配置文件、命令行参数等。

基本上就这些常用方法。选择哪种取决于你的分隔需求:简单分隔用stringstream,复杂模式用正则,追求效率或定制逻辑就手写循环。关键是根据输入特点决定是否需要过滤空串或多分隔符支持。

以上就是c++++中如何分割一个字符串_c++字符串分割的多种实现方式的详细内容,更多请关注php中文网其它相关文章!

c++速学教程(入门到精通)
c++速学教程(入门到精通)

c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号