C++分割字符串,及strtok函数使用

C/C++根据特定字符分割字符串、读取文件去掉逗号等特定字符、strtok()函数详解 字符串分割情况 读取文件时,C++识别的是空格和换行符,但有时候文件是以符号分割的,如逗号等 字符串本身含有特殊符号,如逗号,@等 strtok()函数 strtok()函数能够按照特定的字符分解字符串为一个个子字符串,在头文件#include<string.h>中 strtok()函数原型 char *strtok(char s[], const char *d... 阅读详情

一、使用strtok分割字符数组:

1、strtok函数原型:

char * strtok (char * str, const char * delimiters); 

①、参数str指向要分割的字符串,参数delimiters则为分割依据。当发现分割字符时,将该字符改为'\0'字符。

②、在第一次调用时,strtok()需给出参数str字符串,将字符串转换成标记。

③、往后的调用则将参数str设置成NULL。

④、每次调用成功则返回下一个分割后的字符串指针。 如果已无从分割则返回NULL。

⑤、只能以单个字符最为分割依据(可以有多个依据)。

2、代码: 

//借助strtok实现split
#include<iostream>
#include <cstring>
using namespace std;

int main()
{
    char s[] = "Hello    Nice, to meet  ,* you";
    /*
    ** 用 空格,星号,逗号进行分割 
    ** 无论多少个,都会被当作一个key
    */
    const char* d = "  *,";   //分割依据 
    char *p;  //保存每次分割结果 
    p = strtok(s,d);      
    
    while(p)
    {
    	cout<<p<<endl;
        p=strtok(NULL,d);		   
    }
        
    return 0;
}

3、结果: 

  • 加深理解:
#include<iostream>
#include <cstring>
using namespace std;

int main()
{
    char s[] = "Hello    Nice, to meet  ,* you";
    
    const char* d = "  *,";   //分割依据 
    char *p;  //保存每次分割结果 
    //第一次调用需参数s 
    p = strtok(s,d);    
    cout<<p<<endl;
    //后面的调用,参数为NULL 
    p=strtok(NULL,d);
    cout<<p<<endl;
    
    return 0;
}

 

二、利用find函数与substr函数,实现分割字符串:

1、两个基本函数:

①、find函数用法一: 

1)两个参数: 

size_type find( const basic_string &str, size_type index );

      str:寻找依据,即要寻找什么;

      index:从哪里开始寻找。

2)一个参数:

      一个参数,默认从第一个字符开始寻找。

3)未找到则返回string::npos;

②、substr函数用法: 

basic_string substr( size_type index, size_type num = npos );

index:子串起始位置;

num:子串长度。

2、代码:

#include<iostream>
#include<cstring>
#include<vector>
using namespace std;

/*
*str:要分割的字符串 
*pattern:分割依据
*result:分割结果 
*/ 

//const保证不改变原串,&不用创建新的字符串 
vector<string> splitString(const string& str,const string& pattern)
{
	vector<string> result;
	//string::size_type类型,left:左边界位置  right:右边界位置 
	string::size_type left, right;
	
	right = str.find(pattern);
	left = 0;
	
	while(right != string::npos)
  	{
  		//以免字符串首部就是分割依据,压入长度为0的字符串 
  		if(right-left)
  		{
  			//压入起始位置为left,长度为(right-left)的字符串 
    		result.push_back(str.substr(left, right-left)); 
  		}	
    	left = right + pattern.size();   //右边界右移分割依据的长度,作为新的左边界 
    	right = str.find(pattern, left);   //从left这个位置开始find 
  	}
  	
  	//退出循环时,左边界不是最后一个元素 
  	if(left != str.length())
  	{
  		result.push_back(str.substr(left));
  	}
  	
  	return result;    	
}


int main()
{
	string arrA="cd ab cdcdefcdm ncd";
	string arrB="cd";
	
	vector<string> res=splitString(arrA,arrB);
	
	int len=res.size();
	for(int i=0;i<len;i++)
	{
		cout<<res[i]<<" ";
	}
	
	cout<<"END";
	return 0;
}

3、结果:

 

 

C++中的字符串分割函数-----strtok strtok函数原型:strtok(OriginalString,Seps) 参数: OriginalString代表等待分割的字符串 Seps代表的也是一个字符串,里面防止什么符号是分隔符。eg: Seps=" ,!.n" 表示空格,逗号,感叹号,n都是分割当前字符串的分隔符 运行后产生两个指针:(详情见下面程序注释) 第一个指针pointer_a用来指向函数返回的字符串,这个字符串... 阅读详情

相关推荐

c++分割字符串,strtok与strtok_r的使用记录

strtok的使用写在最开头,strtok是线程不安全的,在使用时一定要考虑到这点。strtok函数使用一个静态变量存储中间值,不要在多线程编程下使用这个函数,不然一定出错。这个函数头文件是 string.h,定义为:char * strtok(char *s, const char *delim)char* s为源字符串,即要被切分的字符串,char * delim为分隔符集合,意味着可以放入多个

u014571011的博客 2494

C++分割带逗号的字符串

C++分割带逗号的字符串1. 解决方法2. 代码实现 我们知道,C++默认通过空格(或回车)来分割字符串输入,即区分不同的字符串输入。但是有时候,我们得到的字符串是用逗号来分割的,给我们使用者带来极大的不便。 那么,有什么办法能更加方便的使用这些字符串呢?其实,C++提供了一种方法(我目前所知道的)来解决这个问题。 1. 解决方法 C++提供了一个类 istringstream ,其构造函数...

九霄星河的博客 2万+

Comsol 基于局部谐振压电材料的可调水下低频吸声

它通过建立基于LRPM的水下吸声理论模型,从有效材料的角度分析可调吸声特性和吸声机理,进一步提高吸声性能。该研究发现,薄的LRPM层可以在目标低频范围内实现出色的吸声效果,而这个目标低频可以通过操纵谐振分流电路进行主动调谐。通过引入局部谐振压电超材料和可调谐的谐振分流电路,研究人员能够有效地控制水下低频吸声特性,并且在吸声带宽方面取得了显著的改进。通过利用薄的活性超材料层,LRPM在水声吸声方面展现出潜力,并且通过操纵谐振分流电路,可以实现对吸声特性的精细控制。

weixin_45382232的博客 786

C++如何做字符串分割(5种方法)

1、用strtok函数进行字符串分割 原型: char *strtok(char *str, const char *delim); 功能:分解字符串为一组字符串。 参数说明:str为要分解的字符串,delim为分隔符字符串。 返回值:从str开头开始的一个个被分割的串。当没有被分割的串时则返回NULL。 其它:strtok函数线程不安全,可以使用strtok_r替代。 示例: //借助strtok实现split #include <string.h> #include <stdio.h&

听风雨 14万+

量子磁场测量技术在生物磁场成像领域的应用现状与产业趋势

首先对量子磁场测量技术的发展进行了简述,然后介绍了量子磁场测量技术在生物磁场成像领域的应用,最后分析了量子磁场测量技术的两大重要应用方向(心磁图仪和脑磁图仪)及其产业现状和未来发展趋势。美国普林斯顿大学在《自然》上公布了目前人类磁场测量灵敏度最高的基于量子磁场测量技术的零场原子磁力计。拥有巨大的发展潜力及庞大的市场空间。因此其数千万元的高昂售价及每年数百万元的超导维护成本限制了超导式心磁图仪的发展和临床应用。而基于超导式脑磁图仪的癫痫、阿尔兹海默症、抑郁症等脑疾病患者的临床研究也取得丰富的研究成果。

罗伯特技术屋 1530

Win10+pycharm+conda 配置Siammask 过程记录(新手向)

我们跑动demo 需要配置两个相关的文件这两个文件需要用 git 进行下载,对于不熟悉git的小伙伴 我这里给出连接,大家可以直接下载即可,并将其配置在 experiments文件夹下然后大家再需要在设置参数参数这里给出了。

C1137577723的博客 551

C++中string如何实现字符串分割函数split()——4种方法

C++分割字符串 四种方法

m0_58086930的博客 12万+

景区导览系统|景区展馆智能导览|小程序导览|电子导览手绘地图制作

AI 数字导游就像一位随时陪伴在游客身边的专属导游,能够根据游客的提问,迅速、准确地提供详细的景点介绍、历史文化知识讲解,甚至能根据游客的兴趣爱好和实时位置,为其智能规划个性化的游览路线。在手绘地图中可以显示景区中的景点信息、景点和景点之间的路径,也可以显示景区的关键地点信息:景区全景、植物景观、河流、道路、地形面貌、卫生间等公共设施~无论是景区还是展馆,道可云AI智能导览系统都能通过丰富的功能、先进的技术,为游客打造便捷、智能、个性化的游览体验,成为文旅行业数字化转型的得力助手。

道可云 1147

C++字符串分割

C++字符串分割3种方法:1、getline函数(推荐);2、regex正则表达式;3、find与substr组合使用; 最后进行总结,说明了各自优缺点,以及各自适用场景

ANEW1001的博客 6853

深入探索前端调试神器vConsole

vConsole作为一款前端调试神器,为前端开发者提供了一个便捷的调试解决方案。通过本文的介绍和示例,相信你已经对vConsole有了更深入的了解。然而,vConsole的功能远不止于此,它还有许多高级用法和技巧等待你去发掘。讨论:你在前端开发中是如何使用vConsole的?你有没有发现vConsole的一些隐藏功能或技巧?欢迎在评论区分享你的经验和见解!💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!

一个做过前端开发的产品经理,经历过睿智产品的折磨导致脱发之后,励志要翻身"农奴"把歌唱,一边打入敌人内部一边持续提升自己,为我们广大开发同胞谋福祉,坚决抵制睿智产品折磨我们码农兄弟! 8524

RISC-V CPU设计(三)---多周期CPU的设计与实现

基本情况 本多周期CPU支持RV32I指令集(fence,ecall,ebreak除外),已通过部分指令的测试,如代码有bug,欢迎指出。 模块划分 代码将CPU划分为以下几个模块: 1.控制单元:ControlUnit 用于产生控制信号,是CPU的大脑,指挥中枢。 2.分支决策单元:BranchUnit 用于决定B型指令是否发生跳转 3.立即数单元:ImmUnit 用于从指令中解析出立即数. 4.寄存器堆:RegisterFile RISC-V的32个寄存器,其中x0寄存器恒为0,不可更改。 5.指令存储

qq_40268672的博客 5542

【C++】 分割字符串方法汇总

四种分割字符串的方法

Long_kin的博客 4046

【MODBUS】Java实现的Modbus协议类库——推荐j2mod库

Jamod是另一个开源的Modbus Java库。这个库的设计是完全面向对象的,基于抽象,应该支持易于理解、可重用性和可扩展性。它支持Modbus RTU和Modbus TCP,并且提供了主站和从站的功能。这是jamod Modbus库的一个分支,取自1.2.1版本,根据Apache 2许可证发布,包含在该项目的SVN存储库中。j2mod项目的目标是基于Java编程语言生成一个功能更全面的Modbus(tm)通信库。这是一个积极开发的项目,接受具有Modbus主站和从站开发经验的专业软件工程师提交的文件。

开源物联网项目商业化作者 5639

C++ 使用strtok函数实现字符串分割实例

int Split_char(vector<string> &str_sq,char *buf){ str_sq.clear(); //strtok(buf," ") 参数①为欲分割的字符串,参数②为分隔符 返回值相当于一个游标 char *tmpStr = strtok(buf," ");// //打印第一段被分割的字符串 cout << tmpSt...

TomCat的播客 480

MiniQMT国债逆回购策略Python代码全解析

通过本文的介绍,我们不仅学习了如何在MiniQMT平台上使用Python编写国债逆回购策略,还对策略的逻辑构建、代码实现以及风险管理有了深入的了解。国债逆回购策略是一种适合初学者的低风险投资方式,希望本文能帮助你在量化交易的道路上迈出坚实的一步。

木头大左的博客 1919

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

C++中使用strtok函数分割字符串String

C++中使用strtok函数分割字符串String

pangaoping1111的博客 1378

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

C++中使用strtok函数分割字符串

 函数原型为:char *strtok(char *str, const char *delim); str为目标字符串,delim为分隔符字符串 #include &lt;iostream&gt; #include &lt;string.h&gt; using namespace std; int main(){ char s[] = "abc edf ghi,jkl * mno/p...

hersheyisunique的博客 1892

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

C++分割字符串

利用C++中的strtok函数来将string使用指定字符串分割。 strtok函数 头文件:#include <cstring> 函数原型:char * strtok (char *str, const char * delimiters); 参数:str:待分割的字符串(c-string);delimiters:分割符字符串。 该函数用来将字符串分割成一个个片段。参数s...

ThorKing01的博客 1万+

C++ strtok函数详解

文章目录头文件函数原型参数返回值注意:使用案例拓展strtok_s与strtok_rstrtok_s函数strtok_r函数拓展用例: strtok函数的作用是把字符串以规定的字符分割开: 头文件 #include <string.h> 函数原型 char *strtok(char s[], const char *delim); 参数 str – 要被分解成一组小字符串的字符串。 delim – 包含分隔符的 C 字符串。 返回值 该函数返回被分解的第一个子字符串,如果没有可检索的字符串

流楚丶格念的博客 1万+

C++快速分割字符串

说起来很有意思,自认为对C语言理解得还是比较深刻的。但居然到今天才知道有个strtok函数,试用了一下突然感慨以前做了多少重复劳动。每次需要解析配置文件,每次需要分割字符串,居然都是自己去分割字符串,既累人又容易出错。感概继续学得不够全面啊!这里引用一段strtok用法: The strtok() function returns a pointer to the next "token"

u011044413的专栏 977

C++实现字符串分割函数split()

目录 使用strtok()完成分割 使用strsep()完成分割 使用strtok_r()完成分割 实现字符串分割 前言 最近遇到了一个字符串分割的问题,在C++的标准库里面没有字符分割函数split()。我想这个问题今后可能还会再遇见,所以使用C/C++中的字符串分割方法完成相应的功能。 需求:对一个字符串进行分割,然后将分割后的数据存起来,想用的时候像用数组那样拿就行了。所以在完...

Tyler_Zx的博客 2万+

字符串分割

用C语言中的strtok(), strtok_r()实现字符串分割。 用C++中的substr()实现字符串分割。 strtok(), strtok_r()两个函数的源码。

zkk258369的博客 1418

python中有split将字符串分割成list,c++里你应该这么做

我们知道,python里想读取文件内容,然后安装分割符在分割成list很简单使用split或者re.split即可。 但上面的过程在c++中就比较复杂了,有好几种方法,有使用stringstream的,有使用boost库的,但其实都挺复杂,同时对于需要正则分割的需求更不方便。这里推荐大家使用strtok这个来自于string.h的函数。代码如下。 // An highlighted block ...

生物信息bug一扫光 1697

strtok和strtok_s函数使用说明

strtok函数

qq_42287144的博客 3488

C++字符串分割方法总结

在一些编程练习中,经常会对字符串进行处理,往往处理之前都会对字符串进行分割来提取各部分信息。在C++中虽然没有像python那样提供split这样直接的字符串分割函数,但也有一些其他的方法能够对其进行分割,下面介绍几种C++中常用的字符串分割方法。 通过string成员函数实现 在C++ string类中,提供了两个成员函数可以用来实现字符串分割,一个是find函数,另一个是substr函数,下面看一下这两个函数的声明。find函数: 原型: size_t find (const string&

wzxiaodu的专栏 1万+

C++字符串分割函数 strtok

在编写程序的过程中,经常会遇到对字符串进行分割的问题。如果自己判断分割的话比较麻烦,这里介绍一下C++库函数strtok的用法。 头文件:#include <cstring> 函数原型:char *strtok(char *str, const char *delim); 参数解释:参数1str: 要进行分割的字符串; 参数2delim:根据delim进行分割 返回值:当某个字符片段被发现,则指向字符片段的开头;若没有发现,则返回NULL;若到达str的末尾,也返回NULL 实例: #inc

zhangjianangyou的博客 871
上一篇: 【char* 字符指针的用法】及【输出NULL的问题】
下一篇: string与char数组相互转换
Estrellas_
博客等级 码龄9年 273粉丝 233原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值