前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >C++实现字符串的分割和替换

C++实现字符串的分割和替换

作者头像
恋喵大鲤鱼
发布于 2019-02-22 06:48:28
发布于 2019-02-22 06:48:28
3K00
代码可运行
举报
文章被收录于专栏:C/C++基础C/C++基础
运行总次数:0
代码可运行

代码编译运行平台:VS2012+Win32+Debug


1.C++中替换所有指定子串

以下代码,作为平时代码库的储备,仅供各位猿友参考:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//替换指定的子串
//src:原字符串 target:待被替换的子串 subs:替换的子串
string replaceALL(const char* src, const string& target,const string& subs) 
{
	string tmp(src);
	string::size_type pos =tmp.find(target),targetSize =target.size(),resSize =subs.size();  
	while(pos!=string::npos)//found  
	{  
		tmp.replace(pos,targetSize,subs);
		pos =tmp.find(target, pos + resSize);
	}
	return tmp;
}

代码主要说明: (1)tmp.find(target):查找子串第一次出现的下标; (2)string::npos:表示未查找到子串时返回的数值。MSDN中规定,其值定义如下:static const size_type npos = -1;,转换为无符号整型unsignned int表示的是string所能容纳的最大字符数。 (3)string::size_type (由字符串配置器 allocator 定义) 描述的是 string的size,故需为无符号整数型别。因为字符串配置器缺省以类型size_t 作为 size_type。

2.C++按指定分隔符分割字符串

因为C++中istringstream无法提供按指定字分隔符进行字符串的格式化输入,所以这里实现一个按指定字符分割字符串,然后再读取分割后的子串。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//qsort函数需要的比较函数,按照升序排序
int comp(const void*a,const void*b)
{
	return *(int*)a-*(int*)b;
}

//按指定分隔符分割字符串
//src:源字符串 delimiter:分隔符集合
vector<string> split(const string& src,const string& delimiter) 
{
	vector<string> strRes;
	int maxSubstrNum=src.size();
	int* pos=new int[maxSubstrNum];
	memset(pos,0,maxSubstrNum*sizeof(int));
	
	int j=0;
	for(size_t i=0;i<delimiter.size();++i)
	{
		string::size_type index=src.find(delimiter[i]);
		while(index!=string::npos)
		{
			pos[j++]=index;
			index=src.find(delimiter[i],index+1);
		}		
	}
	//排序
	qsort(pos,j,sizeof(int),comp);
	//取出第一个子串
	string substrFir=src.substr(0,pos[0]);
	if(substrFir!="")
		strRes.push_back(substrFir);
	//取出中间j-1个子串
	for(int i=0;i<j-1;++i)
	{
		string substr=src.substr(pos[i]+1,pos[i+1]-pos[i]-1);
		if(substr!="")
			strRes.push_back(substr);
	}
	//取出最后一个子串
	string substrLast=src.substr(pos[j-1]+1,src.size()-pos[j-1]-1);
	if(substrLast!="")
		strRes.push_back(substrLast);	
	delete[] pos;
	return strRes;
}

代码主要说明: (1)利用find()和substr()函数实现分割功能; (2)代码中,需要对分割符出现的下标进行排序,这样才能顺序的取出子串。


参考文献

[1]std::string::find() 和 std::string::npos [2]C++常用字符串分割方法实例汇总

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015年08月24日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
C++ 字符串分割
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
恋喵大鲤鱼
2019/10/22
4.5K0
C++实现字符串的分割和替换
代码主要说明: (1)tmp.find(target):查找子串第一次出现的下标; (2)string::npos:表示未查找到子串时返回的数值。MSDN中规定,其值定义如下:static const size_type npos = -1;,转换为无符号整型unsignned int表示的是string所能容纳的最大字符数。 (3)string::size_type (由字符串配置器 allocator 定义) 描述的是 string的size,故需为无符号整数型别。因为字符串配置器缺省以类型size_t 作为 size_type。
恋喵大鲤鱼
2018/08/03
9660
C++之split字符串分割
函数原型:char * strtok (char *str, char * delim);
全栈程序员站长
2022/08/13
6.1K0
C++之split字符串分割
C++ 使用STL string 实现的split,trim,replace-修订
编辑器加载中... 使用python的时候默认str 对字符串操作支持非常丰富,相信每个C++程序员都自己写过string的strim、split、replace, 写个小工具函数,留着用,以前偷懒,写了好几次,这次总结一下,贴出来。 #include <iostream> #include <vector> using namespace std; namespace strtool { string trim(const string& str) { string::size_type po
知然
2018/03/09
1.4K0
小朋友学经典算法(12):分割字符串
在分割字符串之前,先来了解一些跟字符串相关的变量或函数: (1)size_type:size_type由string类类型和vector类类型定义的类型,用以保存任意string对象或vector对象的长度,标准库类型将size_type定义为unsigned类型。
海天一树
2018/07/25
4980
Dijkstra算法求单源最短路径
在一个连通图中,从一个顶点到另一个顶点间可能存在多条路径,而每条路径的边数并不一定相同。如果是一个带权图,那么路径长度为路径上各边的权值的总和。两个顶点间路径长度最短的那条路径称为两个顶点间的最短路径,其路径长度称为最短路径长度。
恋喵大鲤鱼
2018/08/03
2.5K0
Dijkstra算法求单源最短路径
C++在线五子棋对战(网页版)项目:实用工具类模块代码实现
#ifndef _M_LOGGER_H_  和 #define _M_LOGGER_H_是预处理器指令,用于防止头文件被重复包含。如果头文件已经被包含了,那么这对指令将会被跳过。
二肥是只大懒蓝猫
2023/10/13
3870
C++在线五子棋对战(网页版)项目:实用工具类模块代码实现
【C++】深度解析:用 C++ 模拟实现 string 类,探索其底层实现细节
2. 标准的字符串类提供了对此类对象的支持,其接口类似于标准字符容器的接口,但添加了专门用于操作单字节字符字符串的设计特性。
P_M_P
2024/05/26
2070
【C++】深度解析:用 C++ 模拟实现 string 类,探索其底层实现细节
C++ ——string的模拟实现
https://blog.csdn.net/hedhjd/article/details/142023625?spm=1001.2014.3001.5501
迷迭所归处
2024/11/19
650
【C++】深入探索string类的实现(下)(含源码)
该篇文章承接上一篇文章string类的实现(上),希望大家可以先看看上一篇文章,链接如下:【C++】深入探索string类的实现(上)
TANGLONG
2025/03/27
620
【C++】深入探索string类的实现(下)(含源码)
【C++进阶】深入STL之string:模拟实现走进C++字符串的世界
前言:在C++中,string是一个极其重要且常用的类,它为我们提供了丰富的字符串操作功能。然而,了解其背后的实现原理,不仅可以帮助我们更好地使用它,还能让我们对C++的内存管理、模板编程等有更深入的理解。本文将带你走进C++字符串的世界,通过模拟实现一个简单的string类,来探索其内部机制
Eternity._
2024/06/14
2040
【C++进阶】深入STL之string:模拟实现走进C++字符串的世界
C++中字符串的分割
下面开始正题,C++中字符串的分割。 1. 使用strtok函数进行字符串的分割 2. 使用stringstream类配合getline函数进行字符串的分割 3. 使用STL的find函数以及字符串类的substr函数进行字符串分割
卡尔曼和玻尔兹曼谁曼
2019/01/22
7.4K0
C++中字符串的分割
【C++】模拟实现string类
https://blog.csdn.net/weixin_72357342/article/details/136852268?spm=1001.2014.3001.5502 而在本次项目中我们的目标是模拟实现一个string类: 该string包含四个成员变量,分别是:
修修修也
2024/05/30
2800
【C++】模拟实现string类
c++ 常用的遍历,删除,分割等等文件处理函数代码实现
原文链接:https://www.cnblogs.com/DOMLX/p/9622851.html
徐飞机
2018/09/30
1K0
C/C++语言字符串操作总结大全(超详细)
strpbrk(p, p1) 以目标字符串的所有字符作为集合,在当前字符串查找该集合的任一元素
用户7886150
2021/02/08
9270
【C++】string类——模拟实现
通过模拟实现string类的主要接口可以使我们对string类的理解更加透彻,深入理解内存管理,可以更好地理解字符串在内存中的存储方式,以及如何进行内存分配和释放,从而避免常见的内存泄漏和溢出问题,加深对面向对象编程理念的理解,比如封装、继承和多态。
_小羊_
2024/10/16
1320
【C++指南】告别C字符串陷阱:如何实现封装string?
C 语言中,字符串是以 '\0' 结尾的一些字符的集合,为了操作方便, C 标准库中提供了一些 str 系列
egoist祈
2025/04/26
830
【C++指南】告别C字符串陷阱:如何实现封装string?
【代码随想录】二刷-字符串
字符串 如果想让这套题目有意义,就不要申请额外空间。 344.反转字符串 双指针 // 时间复杂度O(n),执行n/2次交换 // 空间复杂度O(1) class Solution { public: void reverseString(vector<char>& s) { int n = s.size(); for(int left = 0,right = n-1;left <= right;left++,right--){ swap(
半生瓜的blog
2023/05/13
2040
【代码随想录】二刷-字符串
【c++丨STL】string模拟实现(附源码)
之前我们学习了STL的第一个容器--string及其常用接口的使用方法:
ephemerals__
2024/10/24
1390
【c++丨STL】string模拟实现(附源码)
C++中string的底层实现,关于string的一切在你面前轻松拿捏
C++ 中的 std::string 是最常用的数据结构之一。然而,深入了解它的底层实现机制,可以显著提升你对内存管理和数据操作的理解。
用户11286421
2024/10/15
1280
推荐阅读
相关推荐
C++ 字符串分割
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验