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字符串分割相关推荐

  1. 【String字符串分割以及字符串截取】

    字符串分割以及字符串截取 字符串分割 案例: 运行结果 字符串截取 案例: 运行结果 字符串分割 1.使用String类中的split()方法可以对字符串进行分割,split()方法提供了以下两种字符 ...

  2. String字符串分割的3种方法 Java

    方法1:split(string) 方法 使用了 split(string) 方法通过指定分隔符将字符串分割为数组 public class Test {public static void main ...

  3. 字符串分割(split),将字符串按照指定字符进行分割。split(String regex)和split(String regex, int limit)

    一.split(String regex)字符串分割,将字符串按照指定字符进行分割,返回的是一个字符串数组. public String[] split(String regex) {return s ...

  4. c++ 按分割符(忽略多次出现)切割string字符串

    最近在做各家公司的笔试题,每次花在数据输入上时间很多,尤其是遇到字符串问题,总是卡壳.而其中最麻烦的就是输入一串字符串,以分隔符进行分隔,比如逗号,忽略出现多次的情况.因为C++不像python和Ja ...

  5. java string分割_java 字符串分割的三种方法(总结)

    最近在项目中遇到一个小问题,一个字符串分割成一个数组,类似String str="aaa,bbb,ccc"; 然后以","为分割符,将其分割成一个数组,用什么方 ...

  6. java String中文字符串分割成数组 中文字符串分割成一定长度的字符串数组

    java String中文字符串分割成一定长度的字符串数组 /*** 几个字一组 变量控制 大于零有意义*/ int num = 6; /*** 待操作的字符串*/ String str = &quo ...

  7. Java对于字符串的处理【String和int之间的转换、字符串拼接、字符串获取长度、字符串大小写转换、字符串去空格、字符串分割、字符串替换、字符串提取、字符串比较、字符串查找】

    文章目录 String字符串 和 整型int 的相互转换 String转化为int int 转换为 String 字符串拼接 使用连接运算符 "+" 使用 concat() 方法 ...

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

    如: string str1 = "This is a test"; string str2 = "This-is-a-test"; string str2 = ...

  9. Linux 内核可用的字符串分割函数 strsep (String Split Function strsep in Linux Kernel)

    C 语言字符串分割可使用 strsep,是 strtok 函数的替代,而且可用于内核,推荐. char *strsep(char **stringp, const char *delim); 函数接受 ...

最新文章

  1. struts2-20-下载文件及授权控制
  2. 单页面抓图并且保存的爬虫
  3. java 枚举(enum) 详细用法
  4. 1075 PAT Judge (25 分)【难度: 一般 / 知识点: 多关键字排序】
  5. 好用的浏览器_“遇见”一个好用的浏览器,功能非常强大到无法想象
  6. 大归因+小归因,先崛网络帮你还原SEM的真实价值
  7. Java-IO流之BufferedReader 和BufferedWriter的使用和原理
  8. 前端学习(3135):react-hello-react之函数的柯里化
  9. 【牛客 - 303K第十五届浙江大学宁波理工学院程序设计大赛(同步赛)】Technology Tree(树形dp,tricks)
  10. CPU核数和线程数查找
  11. HDU-神、上帝以及老天爷
  12. redis 自增_坏了,Redis的字符串类型竟然被张三学明白了?
  13. 使用过的MySql查询语句[待续...]
  14. 远程mysql_java.sql.SQLException: null, message from server: Host 'xxx' is not allowed to connect
  15. 十次方项目开发系列【1】:项目介绍和工程搭建
  16. Java实现 LeetCode 289 生命游戏
  17. CISCO ASA任意文件读取漏洞复现 (CVE-2020-3452)
  18. 那些年我们踩过的Hive坑
  19. 【oracle】查看oracle客户端版本和位数
  20. zabbix配置步骤、操作及使用个人邮箱、企业微信、钉钉报警的配置

热门文章

  1. 虾米音乐app代码骂用户是穷逼VIP….原来代码能隐藏这么好玩的内容
  2. PHP快速实现微信小程序授权
  3. 蚂蚁花呗被盗刷怎么办?
  4. N - 蚂蚁花呗(栈应用)
  5. 请用一句话证明你是产品经理
  6. Unity2d 击败敌人随机掉落物件
  7. MySQL替换回车符\n
  8. VIJOS-卡布列克圆舞曲(模拟)-c++
  9. 【原创】20大最活跃的敢死队营业部排名
  10. JS获取Cookie