c++如何按逗号分割字符串并存入数组_getline与vector实战【附代码】

阿静小哥_8442

阿静小哥_8442

2026-03-24

915人浏览

原创

最稳妥的字符串按逗号拆分方式是用 std::getline 配合 std::stringstream;先构造 std::stringstream ss(str),再循环调用 std::getline(ss, token, ','),结果存入 std::vector,注意处理空字段和首尾空格需手动实现。

c++如何按逗号分割字符串并存入数组_getline与vector实战【附代码】

用 std::getline 配合 std::stringstream 拆分最稳妥

直接用 std::getline 按逗号切字符串,比手写循环或正则更轻量、更可控,尤其适合纯 ASCII 分隔符场景。它不依赖 C 风格字符串边界,也不需要提前预估字段数量。

常见错误是把 std::getline 用在 std::string 上——它只接受 std::istream&,所以必须套一层 std::stringstream。

  • 先构造 std::stringstream ss(str),再对 ss 调用 std::getline(ss, token, ',')
  • 注意:逗号是字面量 ',',不是字符串 ","
  • 空字段(如 "a,,c")会被正常捕获为长度为 0 的 token,这点和 Python 的 str.split 行为一致

std::vector<:string></:string> 是默认存储容器,别手动 new 数组

拆出来的每个 token 直接 push_back 到 std::vector<:string></:string>,不用预分配大小,也不用 new[] + char* 手动管理内存。C++11 后移动语义让这个过程几乎没有额外开销。

容易踩的坑是误用 reserve 替代 resize:前者只预留容量,不构造对象;后者才真正生成可索引的元素。但分割长度未知时,reserve 也无从下手,不如让 vector 自己增长。

  • 声明写成 std::vector<:string> tokens</:string>,别用裸指针或固定长度数组
  • 如果后续要频繁随机访问且确定字段数,可最后调用 tokens.shrink_to_fit() 省点内存
  • 不要用 std::array,它要求编译期知道长度

处理首尾空格和连续逗号得自己加逻辑

std::getline 不会自动 trim 空格,也不会合并连续分隔符。比如 " a , , b " 会得到三个 token:" a "、" "、" b "。这不是 bug,是设计使然。

C++ 算法竞赛自动化测试数据生成与校验框架
C++ 算法竞赛自动化测试数据生成与校验框架

根据原题生成新题面、验证器及完整测试数据,自动套用 testlib 模板,用于用户要求生成测试数据时。

下载

是否需要清理,取决于你的使用场景:解析 CSV 文件通常要保留空白;读配置项往往要 trim;做命令行参数解析可能还要跳过空字段。

  • trim 可用 token.erase(0, token.find_first_not_of(" \t\r\n")) 和 token.erase(token.find_last_not_of(" \t\r\n") + 1)
  • 跳过空字段只需在 push_back 前加判断:if (!token.empty()) tokens.push_back(token)
  • 连续逗号产生的空字段,std::getline 本身已正确识别,无需额外状态机

别用 strtok 或 boost::split 增加依赖

strtok 是 C 函数,会修改原字符串、不是线程安全、无法处理空字段,且返回 char* 容易悬垂;boost::split 功能强但引入整个 Boost 太重,除非项目 already 重度依赖 Boost。

标准库方案已经足够:<sstream></sstream> + <vector></vector> + <string></string> 全是头文件,零运行时依赖,编译快,兼容性从 C++11 到 C++20 都稳。

  • 确认包含头文件:#include <sstream></sstream>、#include <vector></vector>、#include <string></string>
  • 如果字符串含 Unicode 逗号(如中文顿号、全角逗号),std::getline 无法识别——它按字节匹配,不是字符;这时得换用 ICU 或 C++20 的 std::ranges::split_view

连续空格、嵌套引号、转义逗号这些 CSV 复杂情况,std::getline 就真不管了——它只是个流提取器,不是 CSV 解析器。真遇到那种格式,该上专用库就上,别硬撑。

C++免费学习笔记(深入):立即使用
在学习笔记中,你将探索 C++ 的入门与实战技巧!

相关文章

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

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

下载

相关标签:

c++

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.02

5259

3

登录token无效
登录token无效

登录token无效解决方法:1、检查token的有效期限,如果token已经过期,需要重新获取一个新的token;2、检查token的签名,如果签名不正确,需要重新获取一个新的token;3、检查密钥的正确性,如果密钥不正确,需要重新获取一个新的token;4、使用HTTPS协议传输token,建议使用HTTPS协议进行传输 ;5、使用双因素认证,双因素认证可以提高账户的安全性。

2023.09.14

12066

6

登录token无效怎么办
登录token无效怎么办

登录token无效的解决办法有检查Token是否过期、检查Token是否正确、检查Token是否被篡改、检查Token是否与用户匹配、清除缓存或Cookie、检查网络连接和服务器状态、重新登录或请求新的Token、联系技术支持或开发人员等。本专题为大家提供token相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.14

1465

5

token怎么获取
token怎么获取

获取token值的方法:1、小程序调用“wx.login()”获取 临时登录凭证code,并回传到开发者服务器;2、开发者服务器以code换取,用户唯一标识openid和会话密钥“session_key”。想了解更详细的内容,可以阅读本专题下面的文章。

2023.12.21

3217

3

token什么意思
token什么意思

token是一种用于表示用户权限、记录交易信息、支付虚拟货币的数字货币。可以用来在特定的网络上进行交易,用来购买或出售特定的虚拟货币,也可以用来支付特定的服务费用。想了解更多token什么意思的相关内容可以访问本专题下面的文章。

2024.03.01

5381

5

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.03

1558

5

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.04

2244

5

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

2023.10.24

5784

49

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

2023.11.24

4869

6

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Conan 2 Essentials 免费课程
Conan 2 Essentials 免费课程

共0课时 | 0人学习

CMake 与 Conan 集成实践
CMake 与 Conan 集成实践

共0课时 | 0人学习

Conan 2 高级依赖模型介绍
Conan 2 高级依赖模型介绍

共0课时 | 0人学习