当前位置:首页 > 生活百科

c++截取字符串(前端截取字符串的方法)

栏目:生活百科日期:2025-04-21浏览:0

字符串截取我想每个程序猿不管是新手还是老手都很熟悉了,像C++里的substr()方法就十分好用,但是这个方法需要知道你要截取位置的起始位置和需要截取的字符串长度,又或者需要知道截取的起始位置和停止位置。

背景

上面说的substr方法在截取不确定长度字符串和一次性截取多段子字符串时用起来不是很方便。小编就遇到这样的问题,下面来详细讲讲:

现在有一串格式固定但是长度不确定的字符串,例如:set(“
mill_ed.8.f_steptools.1.st_profile”, “face”, 50.800);这样一个字符串,他的结构是有规律的,都是由“.”分隔。

如上,我需要截取标红色的部分,其他部分都是固定的,按照常规方法我是可以先用“.”将字符串分割,然后再有部分的再分别去截取。但是我嫌麻烦,于是我就想到了正则表达式,想着能不能用正则去将我需要的字符匹配出来。

实现

直接上代码吧:

先看下运行结果吧:

怎么样一次性将所有需要的子字符串全部截取出来了,是不是很方便快捷呢?(大家注意一下这里,result容器内的第一项是匹配成功的整字符串,后面的才是小括号中()匹配条件的子字符串)。

详解

接下来我们来了解一下C++正则的一些基本用法吧。我们在用C++的正则的时候需要引入regex库#include&<regex&>,这个库里面有哪些东西呢?

这里的函数和类型我就不讲了,主要用到regex_match方法。然后将目标字符串与你得正则表达式去匹配,得到的匹配结果全部在smatch类型的容器中。其中最终要的主要是regex正则表达式

regex pattern = regex(&“set\(&“.*)\.(\d+)\.(.*)\.(\d+)\.st_profile&”,.*&”([a-z]+)&”,(.*)\).*&”);这里是核心,这里用到的正则知识其实都是最基本的,不是很复杂,如果有不懂得小伙伴自己去看下正则相关的知识,正则是与编程语言无关的都是通用的。大概讲一下这里用到的几个通配符的意思:(截图来源菜鸟教程)

需要特别说明的是你需要匹配出来的子字符串的表达式一定要用小括号“()”括起来,不然的话匹配结果是不会进入到smatch容器里去的,我们验证一下,我将第一个子表达式的小括号“()”去掉我们看一下结果:regex pattern = regex(&“set\(&“.*\.(\d+)\.(.*)\.(\d+)\.st_profile&”,.*&”([a-z]+)&”,(.*)\).*&”);

运行结果是:

我们看到结果与上一次比少了mill_ed这一项。

希望对大家有帮助,如果大家以后在处理字符串有这种需求的话可以尝试一下这种方法,我个人觉得用起来是很方便快捷的。最后给大家附上源代码吧

#include &<stdio.h&>#include &<iostream&>#include &<regex&>using namespace std;int main(){string str("set("mill_ed.8.f_steptools.1.st_profile","face", 50.800);");regex pattern = regex("set\("(.*)\.(\d+)\.(.*)\.(\d+)\.st_profile",.*"([a-z]+)",(.*)\).*");smatch result ;bool isMatch = regex_match(str,result,pattern);for (int i = 0; i &< result.size(); i++){cout&<&<result[i]&<&<endl;}system("pause");return 0 ;}

“c++截取字符串(前端截取字符串的方法)” 的相关文章

公路自行车品牌介绍(全球十大公路自行车品牌)

对于公路自行车来说,去年是蓬勃发展一年,许多品牌都推出了比以往更有竞争力的产品,所以选购一辆新车是一项棘手的任务。外媒Road.cc在去年他们测试过的竞赛型公路...

1t固态硬盘推荐,性价比最高的固态硬盘是哪个

进入2017年,各大闪存厂商纷纷加紧研发堆叠层数更高的3DNAND,以期占领市场,进一步扩大份额。在今年的5月底,西部数据和旗下品牌闪迪(SanDisk)共同发...

steam无法启动游戏怎么办(绕过steam启动单机游戏)

很多小伙伴在用steam玩2077的时候,会发现点了开始游戏没有反应,我在十号开始玩的时候,也发现这个问题.当时上网搜,很多人在问解决方法,但是处理方法比较少,...

奢侈品文案怎么写,奢侈品简洁广告语分享

一个女人,一手创造了一个伟大的时尚帝国,她有主见有野心、优雅、独立,用行动告诉全世界,女人可以征服全世界。她就是Chanel创始人——CocoChanel。我们...

塔式散热器和下压散热器的区别(两者工作原理和优缺点分

在普通情况下DIY电脑,绝大部分的人都会选择采用塔式散热器,并顺便吐槽一下下压式散热器怎么不好。而只有在考虑视觉效果或者mini主机的安装上,下压式散热器才有发...

arduino编程语言入门(Arduino基础入门篇)

一、简介有些开源项目将少儿可视化编程环境scratch与Arduino相结合,可以进行积木一样拖拉式编程。常见的有:1.S4A不过其Scratch是基于2.0开...

dvd刻录软件哪个好用(刻录机刻录光盘的方法和步骤)

最近好多朋友都在寻找好用的DVD刻录软件,那么DVD刻录软件哪个好?别急,今天macz小编给大家整理了5个简单易用的DVD刻录软件,可以帮您快速完成视频录制,感...

哒哒在线英语好吗,家长对哒哒英语评价

前几天,有家长来向我咨询哒哒英语的wonders课程,然而我并不建议他报,主要原因是基础和课程不匹配。那哒哒英语到底适合什么样的孩子呢?恰好,鱼sir一直有在帮...

c语言count怎么用(excel中count函数的用法)

在日常工作学习生活中,我们经常遇到需要统计相关数据数量的情况,甚至按条件来进行计数,这时候我们就需要借助计数函数来解决相关问题。接下来我们来熟悉一下excel表...

1005一体机在线驱动安装步骤(详解hp1005扫描使用方法)

今天的主角就是这位hp1005打印复印一体机故障问题:复印打印不清晰,以前卡纸判断问题出在定影膜,准备更换。上图就是hp1005真身了,准备开拆hp1005打印...