基于C++的一种字符串切分方法及示例代码

一、概述

在 Java 和 python 中,都有实现字符串切分的方法, 如split() ,使用起来较为方便,但是在标准的 C++ 中,却没有内置的 split() 方法。

我们可以使用标准库中的一些函数和方法来实现字符串的切分,这里主要使用到了C++ STL 中的 字符串流对象(stringstream)和 getline()函数 来实现字符串的切分。

二、stringstream 和 getline 简介

2.1 stringstream 类

stringstream 是 C++ STL 中的一个类,定义于 <sstream> 头文件中(sstream是stringstream的缩写)。通过stringstream ,可以将字符串作为输入输出流来处理(类似于 cin 和 cout 对标准输入输出流的操作,stringstream 可进行针对于字符串的输入输出操作)

示例代码如下:

#include <iostream>
#include <sstream>
using namespace std;int main() {// 创建一个 stringstream 对象 ss,并初始化其内容stringstream ss("I Love You ! ! !");// 从 ss 中逐个读取单词,输出到s,然后输出到屏幕string s;while (ss >> s) {cout << s;}cout << endl;// 清除流的状态标志,以重新定位ss.clear();// 将读取位置设置为开头,以便从头开始读取流中的内容ss.seekg(0);// 将 ss 中的内容设置为 "3 2 1",覆盖原有内容ss.str("3 2 1");// 从 ss 中逐个读取整数,并输出int t;while (ss >> t) {cout << t << " ";}cout << endl;return 0;
}

运行结果:

2.2 getline()函数

getline() 是 C++ STL  中的一个函数,用于从输入流中读取一行字符串。

该函数接受3个参数:

1. 输入流对象(istream):通常是 cin 或 文件流对象。

2. 输出字符串(string):读取的字符串将存储于该变量。

3. 分隔符(可缺省),用于指定结束符,如不指定分隔符参数,则默认为换行符 '\n' 。

示例代码如下:

#include <iostream>
#include <string>
using namespace std;
int main() {string input;cout << "please input a string" << endl;// 默认换行符为结束符getline(cin, input);cout << "input string: [ " << input << " ]" << endl;cout << "\nplease input a string again" << endl;// 指定空格作为结束符getline(cin, input, ' ');cout << "input string: [ " << input << " ]" << endl;return 0;
}

运行结果:

 

2.3 相关参考

关于字符串流对象 stringstream 的详细用法可以参考:

cplusplus.com/reference/sstream/stringstream/

关于 getline()函数 可以参考:

cplusplus.com/reference/string/string/getline/

 

三、切分方法

3.1 切分步骤

1. 创建字符串流对象,使用目标字符串(待切分的字符串)对其进行初始化。

2. 以字符串流对象为输入流对象,使用 getline() 函数,以指定的结束符为结束标志,依次读取输入的字符串。

3. 循环进行 2 ,直到结束。期间,每次都会持续读取到指定的分隔符后结束,此时可直接处理子串(或者递归对子串进行处理),以此实现对字符串的切分。

3.2 举例

"姓名:时栈,性别:男,地区:陕西,爱好:游泳"

 对于上述字符串,可以先以逗号为分隔符,对于切分下来的子串,再使用冒号作为分隔符。

 

 

四、示例代码

对于上述子串,使用上述步骤进行切分,代码如下:

#include <iostream>
#include <sstream>
#include <vector>
using namespace std;
typedef pair<string, string> PSS;// 该函数使用 delimiter 将 str 切分为键值对
// 并返回pair<string, string> 的数组
vector<PSS> split(string str, char delimiter){stringstream ss(str);string keyValueStr;vector<PSS> ret;// 从 ss 中读取数据,读取到delimiter符号为止,并将读到的内容存储到keyValueStrwhile(getline(ss, keyValueStr, delimiter)){// 使用stringstream处理keyValueStr,以提取键和值stringstream kvs(keyValueStr);string keyStr, valueStr;getline(kvs, keyStr, ':');getline(kvs, valueStr, ':');// 存储键值对到vector中ret.push_back( {keyStr, valueStr} );}return ret;
}int main(){// 待切分的字符串string str1 = "姓名:时栈,性别:男,地区:陕西,爱好:游泳";string str2 = " 日期:2024年3月14日; 农历:二月初五; 天气:多云; 星期:周四";// 根据字符串的特点进行切分vector<PSS> kv1 = split(str1, ',');vector<PSS> kv2 = split(str2, ';');// 输出kv1cout << "kv1:" << endl;for(PSS t : kv1) cout << t.first << " " << t.second << endl;// 输出kv2// 这里可以对kv2中的包含的空格进一步处理,处理过程此处省略cout << "\nkv2:" << endl;for(PSS t : kv2) cout << t.first << " " << t.second << endl;return 0;
}

运行结果:

 如有不当或错误之处,恳请您的指正,谢谢!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/743524.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Java系列】OOM 时,JVM 堆栈信息保存和分析

一、前言 在日常开发中&#xff0c;即使代码写得再谨慎&#xff0c;免不了还是会发生各种意外的事件&#xff0c;比如服务器内存突然飙高&#xff0c;又或者发生内存溢出(OOM)。当发生这种情况时&#xff0c;我们怎么去排查&#xff0c;怎么去分析原因呢&#xff1f; 一般遇到…

前端开发小技巧【Vue篇】 - 样式穿透 + 绑定变量

前言 样式穿透 Vue都是通过深度选择器来样式穿透的。当我们在写项目的时候&#xff0c;经常会导入第三方库&#xff0c;有些特殊的情况&#xff0c;就是在导入第三方库后&#xff0c;呈现的样式并不是我们想要的样式&#xff0c;所以我们需要对第三方的样式进行修改&#xff1…

Java毕业设计 基于SSM jsp房屋租赁系统 房屋出租系统

Java毕业设计 基于SSM jsp房屋租赁系统 房屋出租系统 SSM jsp 房屋租赁系统 房屋出租系统 功能介绍 用户&#xff1a;首页 图片轮播 搜索 登录注册 新闻公告 新闻公告详情 装修广告 热门房源 房源详情 合租 整租 商业办公 普通民宅 酒店式公寓 全部房源 留言交流 发布帖子 模…

汽车大灯罩汽车尾灯罩破裂裂纹破损破洞掉角崩角等问题能修复吗?怎么修复?

汽车大灯汽车尾灯破裂裂纹破损破洞掉角崩角等问题是一定可以修复的。 汽车灯罩的修复方法取决于灯罩的破损程度和材质。以下是一些常见的汽车灯罩修复方法&#xff1a; 肥皂水清洗&#xff1a;如果灯罩只是轻微模糊或发黄&#xff0c;可以使用肥皂水进行清洗。将肥皂水涂抹在…

opencv-python连通域分割connectedComponents

文章目录 连通域简介绘图代码函数说明 连通域简介 所谓连通域&#xff0c;即Connected Component&#xff0c;是一组彼此相连的像素点的集合&#xff0c;这些像素点彼此之间可以假设一条互相链接的路径&#xff0c;路径上所有像素的灰度一致&#xff0c;或者符合某个特定的条件…

【软考高项】四、信息化发展之数字中国

1、数字经济 定义&#xff1a;从本质上看&#xff0c;数字经济是一种新的技术经济范式&#xff0c;它建立在信息与通信技术的重大突破的基础上&#xff0c;以数字技术与实体经济融合驱动的产业梯次转型和经济创新发展的主引擎&#xff0c;在基础设施、生产要素、产业结构和治理…

Day32:安全开发-JavaEE应用Servlet路由技术JDBCMybatis数据库生命周期

目录 JavaEE-HTTP-Servlet&路由&周期 JavaEE-数据库-JDBC&Mybatis&库 思维导图 Java知识点&#xff1a; 功能&#xff1a;数据库操作&#xff0c;文件操作&#xff0c;序列化数据&#xff0c;身份验证&#xff0c;框架开发&#xff0c;第三方库使用等. 框架…

安装VMWare

下载VMware软件&#xff08;已提供给大家&#xff09; 2&#xff0e;解压压缩文件 3.解压后文件夹中的内容 4.双击.exe进行VMware安装出现的第一个界面 5.点击下一步&#xff0c;出现以下界面 6.勾选我接受复选框&#xff0c;然后点击“下一步”。 7.后面几步都是点击“下一步”…

精品基于Uniapp+ssm英语学习交流平台小程序打卡计划备忘录

《[含文档PPT源码等]精品微信小程序基于Uniappssm英语学习交流平台小程序》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功&#xff01; 软件开发环境及开发工具&#xff1a; 开发语言&#xff1a;Java 后台框架&#xff1a;ssm 安卓框…

深度学习:推动可持续发展与社会责任的创新引擎!

随着科技的飞速发展和全球化的推进&#xff0c;可持续发展和社会责任逐渐成为各个领域关注的焦点。深度学习作为人工智能的重要分支&#xff0c;在可持续发展和社会责任方面发挥着越来越重要的作用。本文旨在探讨深度学习在环境保护、资源利用、犯罪预防和残障人士辅助等领域的…

从零开始学习深度学习库-2:反向传播

欢迎来到本系列的第二篇文章&#xff0c;我们将从头开始构建一个深度学习库。 本博客系列的代码可以在这个Github仓库中找到。 上一篇文章 在上一篇文章中&#xff08;链接见这里&#xff09;&#xff0c;我们实现了线性层和常见的激活函数&#xff0c;并成功构建了神经网络的…

前端学习笔记 | WebAPIs(DOM+BOM)

一、作用和分类 1、基本概念 作用&#xff1a;使用JS去操作HTML和浏览器 分类&#xff1a;DOM&#xff08;文档对象模型&#xff09;和BOM&#xff08;浏览器对象模型&#xff09; html的标签JS的DOM对象 2、获取DOM对象-参数必须加引号 &#xff08;1&#xff09;选择匹配的第…

第10集《天台教观纲宗》

请大家打开讲义第十七页。我们讲到己二、结申正义。 己二、结申正义 《法华经》把我们修行人修行的相貌&#xff0c;比喻作一个车乘。车乘就是一种交通工具&#xff0c;它能够让我们从此岸超越到彼岸去。所以修行它是可以超越的&#xff0c;你今天比昨天超越了&#xff0c;就好…

【C语言步行梯】C语言实现三子棋游戏(含详细分析)

&#x1f3af;每日努力一点点&#xff0c;技术进步看得见 &#x1f3e0;专栏介绍&#xff1a;【C语言步行梯】专栏用于介绍C语言相关内容&#xff0c;每篇文章将通过图片代码片段网络相关题目的方式编写&#xff0c;欢迎订阅~~ 文章目录 需求分析具体实现主函数体菜单实现游戏实…

基于微信小程序的车位共享平台的设计与实现【附项目源码】分享

基于微信小程序的车位共享平台的设计与实现: 源码地址&#xff1a;https://download.csdn.net/download/qq_41810183/88842865 基于微信小程序的车位共享平台设计与实现需求文档 一、引言 随着城市化进程的加快&#xff0c;停车难问题日益凸显。为解决这一难题&#xff0c;我…

VB+ACCESS学籍管理系统-264-(代码+说明)

转载地址: http://www.3q2008.com/soft/search.asp?keyword264 设计要求&#xff1a; 第一&#xff1a;一篇论文&#xff08;5000到10000字&#xff09;不包括图表和程序代码。A4纸20页之内。 论文结构如下&#xff1a; 设计题目&#xff1a;学籍管理系统 附&#xff1a;程…

高级JAVA工程师解决生产环境JVM宕机Java进程挡掉操作系统内存异常实例讲解

高级JAVA工程师解决生产环境JVM宕机Java进程挡掉内存溢出实例讲解 一、事故描述 生产环境Java进程莫名挡掉&#xff0c;JVM宕机。监控平台报警。生产停了&#xff0c;老板急了&#xff0c;客户爆了&#xff0c;怎么迅速解决事故&#xff1f;每次出现生产事故&#xff0c;都是…

使用公式在Excel中指定列值的变化实现自动间隔着色(不是按照固定的行数)

如果你的文件很小&#xff0c;可以手工着色&#xff1b;但如果很大&#xff0c;就要借助公式来着色&#xff1b; 目的是什么&#xff0c;其中之一是&#xff1a;提升可读性。 一起往下看吧&#xff01;&#xff01; 如果你想要根据Excel某列中值的变化来间隔着色&#xff0c;…

easyrecovery破解版百度云(含Mac/Win版)以及EasyRecovery可以恢复哪些设备

软件介绍 当不小心将回收站的文件删除了怎么办&#xff1f;想找回但是不知道怎么找回需要的数据文件&#xff1f;别担心今天小编就为大家介绍一款非常专业的电脑数据文件恢复工具&#xff0c;easyrecovery14是由Ontrack专为电脑用户推出的一款专业的数据恢复软件&…

景联文科技:提供行业垂直大模型训练数据

近年来&#xff0c;以大模型为代表的人工智能技术已成为国家科技实力竞争的焦点。其中垂直大模型作为重要方向&#xff0c;在相关政策引导及市场需求的驱动下&#xff0c;已展现出较强的发展活力。 行业垂直大模型是针对特定行业的需求和场景进行深度定制的。这意味着模型在训练…