C++ string字符串分割
C++ string字符串分割
- 一、find()配合substr()
- 二、使用strtok()函数
- 总结
一、find()配合substr()
第一种办法是先通过find()函数查询到子字符串的位置,而后通过substr进行子字符串截取。
关于find()函数共有以下几种:
1.string中find()返回值是字母在母串中的位置(下标记录),如果没有找到,那么会返回一个特别的标记npos。(返回值可以看成是一个int型的数),示例如下:
#include<cstring>
#include<cstdio>
#include<iostream>
using namespace std;
int main()
{find函数返回类型 size_typestring s("1a2b3c4d5e6f7jkg8h9i1a2b3c4d5e6f7g8ha9i");string flag;string::size_type position;//find 函数 返回jk 在s 中的下标位置position = s.find("jk");if (position != s.npos) //如果没找到,返回一个特别的标志c++中用npos表示,我这里npos取值是4294967295,{printf("position is : %d\n" ,position);}else{printf("Not found the flag\n");}
}
2.返回子串出现在母串中的首次出现的位置,和最后一次出现的位置。示例如下:
flag = "c";
position = s.find_first_of(flag);
printf("s.find_first_of(flag) is :%d\n",position);
position = s.find_last_of(flag);
printf("s.find_last_of(flag) is :%d\n",position);
//s.find_first_of(flag) is :5
//s.find_last_of(flag) is : 25
3.查找某一给定位置后的子串的位置,示例如下:
//从字符串s 下标5开始,查找字符串b ,返回b 在s 中的下标
position=s.find("b",5);
cout<<"s.find(b,5) is : "<<position<<endl;
//s.find(b,5) is : 23
4.查找所有子串在母串中出现的位置,示例如下:
//查找s 中flag 出现的所有位置。flag="a";position=0;int i=1;while((position=s.find(flag,position))!=string::npos){cout<<"position "<<i<<" : "<<position<<endl;position++;i++;}//position 1 : 1//position 2 : 21//position 3 : 36
5、反向查找子串在母串中出现的位置,通常我们可以这样来使用,当正向查找与反向查找得到的位置不相同说明子串不唯一。示例如下:
//反向查找,flag 在s 中最后出现的位置
flag="3";
position=s.rfind (flag);
printf("s.rfind (flag) :%d\n",position);
以上内容转载于https://www.cnblogs.com/wkfvawl/p/9429128.html,可获得更多示例。
在获得子字符串位置后,则可通过substr()函数进行子字符串截取,对于string.subsrt(pos, n)函数,包含string中从pos开始的n个字符的拷贝(pos的默认值是0,n的默认值是string.size() - pos,即不加参数会默认拷贝整个s),若pos的值超过了string的大小,则substr函数会抛出一个out_of_range异常;若pos+n的值超过了string的大小,则substr会调整n的值,只拷贝到string的末尾,注意这里的n是所要截取的字符串长度,代码如下:
string FileName_Flag = "AVW_00_1_0_00.xml,1";
int posId = FileName_Flag.find(",");
scenarioName = FileName_Flag.substr(0, posId);
scenarioName = scenarioName.substr(0, scenarioName.length() - 4);
//scenarioName = "AVW_00_1_0_00"
这样便可以不断地通过改变substr(pos,length)中的pos和length参数获得字符串中的子字符串。
二、使用strtok()函数
函数原型:char *strtok(char *s,const char *delim) 函数功能:分解字符串为一组字符串,s为要分解的字符串,delim为分隔字符串 描述:strtok()用来将字符串分割成一个个片段,参数s指向将要被分隔的字符串,参数delim则为分隔字符串,当strtok()在参数s的字符串中发现到参数delim的分隔字符时,则会将该字符改为'\0'字符,在第一次调用时,strtok()必需给予参数s字符串,往后的调用则将参数s设置成NULL.每次调用成功则返回被分隔片段的指针。 代码如下:
#include<string.h>
#include<stdio.h>int main(){char s[] = "a,b*,c,d";const char *sep = ",*"; //可按多个字符来分割char *p;p = strok(s, sep);while(p){printf("%s ", p);p = strtok(NULL, sep);}printf("\n");return 0;
}
//输出: a b c d
关于C++ string的一些函数说明见:https://blog.csdn.net/modiziri/article/details/41748421
总结
以上即为C++ string字符串分割的一些总结。
C++ string字符串分割相关推荐
- 【String字符串分割以及字符串截取】
字符串分割以及字符串截取 字符串分割 案例: 运行结果 字符串截取 案例: 运行结果 字符串分割 1.使用String类中的split()方法可以对字符串进行分割,split()方法提供了以下两种字符 ...
- String字符串分割的3种方法 Java
方法1:split(string) 方法 使用了 split(string) 方法通过指定分隔符将字符串分割为数组 public class Test {public static void main ...
- 字符串分割(split),将字符串按照指定字符进行分割。split(String regex)和split(String regex, int limit)
一.split(String regex)字符串分割,将字符串按照指定字符进行分割,返回的是一个字符串数组. public String[] split(String regex) {return s ...
- c++ 按分割符(忽略多次出现)切割string字符串
最近在做各家公司的笔试题,每次花在数据输入上时间很多,尤其是遇到字符串问题,总是卡壳.而其中最麻烦的就是输入一串字符串,以分隔符进行分隔,比如逗号,忽略出现多次的情况.因为C++不像python和Ja ...
- java string分割_java 字符串分割的三种方法(总结)
最近在项目中遇到一个小问题,一个字符串分割成一个数组,类似String str="aaa,bbb,ccc"; 然后以","为分割符,将其分割成一个数组,用什么方 ...
- java String中文字符串分割成数组 中文字符串分割成一定长度的字符串数组
java String中文字符串分割成一定长度的字符串数组 /*** 几个字一组 变量控制 大于零有意义*/ int num = 6; /*** 待操作的字符串*/ String str = &quo ...
- Java对于字符串的处理【String和int之间的转换、字符串拼接、字符串获取长度、字符串大小写转换、字符串去空格、字符串分割、字符串替换、字符串提取、字符串比较、字符串查找】
文章目录 String字符串 和 整型int 的相互转换 String转化为int int 转换为 String 字符串拼接 使用连接运算符 "+" 使用 concat() 方法 ...
- C++中string如何实现字符串分割函数split()——4种方法
如: string str1 = "This is a test"; string str2 = "This-is-a-test"; string str2 = ...
- Linux 内核可用的字符串分割函数 strsep (String Split Function strsep in Linux Kernel)
C 语言字符串分割可使用 strsep,是 strtok 函数的替代,而且可用于内核,推荐. char *strsep(char **stringp, const char *delim); 函数接受 ...
最新文章
- struts2-20-下载文件及授权控制
- 单页面抓图并且保存的爬虫
- java 枚举(enum) 详细用法
- 1075 PAT Judge (25 分)【难度: 一般 / 知识点: 多关键字排序】
- 好用的浏览器_“遇见”一个好用的浏览器,功能非常强大到无法想象
- 大归因+小归因,先崛网络帮你还原SEM的真实价值
- Java-IO流之BufferedReader 和BufferedWriter的使用和原理
- 前端学习(3135):react-hello-react之函数的柯里化
- 【牛客 - 303K第十五届浙江大学宁波理工学院程序设计大赛(同步赛)】Technology Tree(树形dp,tricks)
- CPU核数和线程数查找
- HDU-神、上帝以及老天爷
- redis 自增_坏了,Redis的字符串类型竟然被张三学明白了?
- 使用过的MySql查询语句[待续...]
- 远程mysql_java.sql.SQLException: null, message from server: Host 'xxx' is not allowed to connect
- 十次方项目开发系列【1】:项目介绍和工程搭建
- Java实现 LeetCode 289 生命游戏
- CISCO ASA任意文件读取漏洞复现 (CVE-2020-3452)
- 那些年我们踩过的Hive坑
- 【oracle】查看oracle客户端版本和位数
- zabbix配置步骤、操作及使用个人邮箱、企业微信、钉钉报警的配置