今天做到一道题,给定一个类似于广义表的字符串(aaaa(bbbb(cccc,dddd),eeee(ffff))),表明的是各个人的层次关系。比如aaaa是bbbb和eeee的领导,bbbb是cccc和dddd的领导,现输入一个名称,比如ffff,要求输出其领导关系输出:aaaa>eeee>ffff

对于这样一个字母与括号混合在一起的字符串,我首先想到要对其进行拆分。不过字符串拆分的场景有很多,如果仅仅针对这一个问题,未免有些浪费,不如写一个较为通用的方法。于是想到尝试利用正则表达式进行拆分。

要匹配由字母组成的姓名很简单,由一个或多个大小写字母组成,即regex reg("[a-zA-Z]+");

常用到的函数有两个:

函数 功能
bool regex_match(s,reg) 字符串 s与表达式reg是否完全匹配(注意是完全匹配)
bool regex_search(s,M,reg) 字符串s中是否有子串与表达式reg匹配,结果对象存储在M中

接下来详细解释下这个 “ M ”。

引用了https://zh.cppreference.com/w/cpp/regex/regex_search

其类型为smatch,即smatch M;
若不存在该子串(匹配失败):

方法 返回值
M.ready() true
M.empty() true
M.size() 0

若存在该子串:

方法 返回值
M.ready() true
M.empty() false
M.size() 有标记子表达式的数量加 1 ,即 1+e.mark_count()
M.prefix() 前缀字符串
M.prefix().first 指向 该匹配成功的子串 的前缀 的第一个字符的 迭代器
M.prefix().second 指向 该匹配成功的子串 的前缀 的最后一个字符的下一个字符 的迭代器
M.suffix() 后缀字符串
M.suffix().first 同上,这个是后缀
M.suffix().second 同上,这个是后缀
M[0].first 指向匹配序列的首字符 的迭代器
M[0].second 指向匹配数列的结尾后下一个字符 的迭代器
M[0].matched true
M[n].first 匹配有标记子表达式 n 的序列的起始,或若子表达式不参与匹配则为 last
M[n].second 匹配有标记子表达式 n 的序列的结尾,或若子表达式不参与匹配则为 last
M[n].matched 若子表达式 n 参与匹配则为 true ,否则为 false

终于介绍完了,下面是代码:
我想到的是用递归的方法实现划分(divide)函数:

  1. 调用regex_search方法,若匹配成功:
    1. 将前缀中所有非,的字符放入vector
    2. 将匹配的字符放入vector
    3. 对后缀调用divide方法
  2. 若匹配失败(当前串中已无要匹配的子串):
    1. 将当前串所有字符放入vector
#include <iostream>
#include <string>
#include <vector>
#include <regex>
using namespace std;void divide(string s,vector<string> &v,regex reg)
{smatch mResult;if (regex_search(s, mResult, reg)) {for (auto it = mResult.prefix().first; it != mResult.prefix().second; it++) {if (*it == ',')continue;v.push_back(string(1, *it));}v.push_back(string(mResult[0].first, mResult[0].second));divide(mResult.suffix(), v, reg);}else {for (auto it = s.begin(); it != s.end(); it++)v.push_back(string(1, *it));}
}int main()
{string source;vector<string> mid;cin >> source;regex reg("[a-zA-Z]+");divide(source, mid, reg);vector<string>::iterator it;for (it = mid.begin(); it != mid.end(); it++) {cout << *it << ' ';}
}

至于具体通用性如何,以后再修改吧哈哈

C++ 使用正则表达式拆分字符串相关推荐

  1. oracle 正则表达式拆分字符串,oracle中通过正则表达式函数处理逗号分隔的字段...

    这个题目的确不大好写,其实际含义基于一个场景: 比如在oracle的某张表中,有两个字段 A1          B1 1         A,B,C,D, 2         E,F 假如现在的需求 ...

  2. 正则表达式操作字符串

    概念 正则表达式(Regular Expression),又称规则表达式.正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个"规则字符串& ...

  3. Java如何拆分字符串

    假如现在有这样一串字符序列"沉默王二,一枚有趣的程序员",需要按照中文逗号","进行拆分,这意味着第一串字符序列为逗号前面的"沉默王二",第 ...

  4. python3.x 使用正则表达式拆分字符串并换行显示

    最近使用正则表达式拆分化学式,且拆分后的化学式要换行显示,于是用python正则表达式写了一个拆分字符串且拆分后的字符串换行显示的Demo,主要使用正则re模块的findall方法. 关于findal ...

  5. scala 拆分字符串翻转_Scala程序分割字符串

    scala 拆分字符串翻转 A string is a collection that stores multiple characters, it is an immutable sequence ...

  6. 正则表达式查找字符串_如何简单理解正则表达式?只需1分钟就可以看到她优美的舞姿...

    Hi,大家好,本章节开始将会从零开始和大家用图文的方式,让你从零基础学会正则表达式!有兴趣的小伙伴可以持续关注我,或者在专栏中进行查看自我学习,愿与君携手前行! 本文将要说到的正则表达式?可能初学的你 ...

  7. jQuery拆分字符串 split()并且遍历$.each()

    1.拆分字符串 语法:字符串名.split(separator,howmany) separator 必需.字符串或正则表达式,从该参数指定的地方分割 stringObject. howmany 可选 ...

  8. 举个栗子!Tableau 技巧(199):用 Prep 正则表达式拆分复杂字段

    数据准备时,我们经常会遇到需要拆分的字段.对于比较简单规整的字段,可以用 split() 函数进行拆分. 但是,如果遇到较复杂的情况(如下图):没有固定的长度,分隔字符不固定,分隔字符的数量也不固定. ...

  9. 如何在Python中拆分字符串

    使用字符串时,常见的操作之一是使用给定的分隔符将字符串拆分为子字符串数组.在本文中,我们将讨论如何在Python中拆分字符串. PYthon学习企鹅裙:88198-2657 领取python自动化编程 ...

  10. Split()拆分字符串与StringTokenizer拆分字符串

    前言 不管用何种编程语言写代码,对字符串的处理都是必不可少的,其中对字符串的拆分在许多场合都频繁用到. 今天介绍Java中两种主流的拆分方法,一是lang包String类的split()方法,另一种则 ...

最新文章

  1. Intel Realsense D435 composite_frame类 frame类 video_frame类 depth_frame类的关系
  2. ORACLE 调试输出,字符串执行函数
  3. leetcode 67. 二进制求和(C语言)
  4. request用法_3分钟短文:说说Laravel页面会话之间的数据保存Session用法
  5. Qt笔记-QSslSocket双向认证
  6. 7-10 求数字个数 (20 分)
  7. [转载] JAVA中transient 关键字
  8. 统计学基础知识(二)
  9. 201903股票投资与实践入门三:资金流向与K线入门
  10. sed替换字符串的贪婪匹配和最小匹配
  11. ARM发布Cortex-X1,是为了向苹果自研A系列处理器发起冲击吗?
  12. html5实现canvas迷宫游戏,HTML5/Canvas/JS 迷宫生成动画
  13. Wireshark之流量包分析+日志分析 (护网:蓝队)web安全 取证 分析黑客攻击流程(上篇)
  14. 文件在服务器中存储,如何发送音频文件在服务器中存储
  15. CS188 Proj 1
  16. 各大跨境电商卖家不容错过下半年的促销活动安排
  17. java递归把list菜单列表转为菜单树
  18. plsql导入/出dmp文件注意点
  19. paraview管道:PipeLine
  20. dnf哪个服务器稳定,《dnf》国服95版本职业排行 最强职业排行榜一览

热门文章

  1. zabbix 2.4.5 自定义key监控redis
  2. java输出到txt,换行问题
  3. HCIE-RS面试---STP拓扑变化过程
  4. 游戏筑基开发之C语言打印(printf)中文时出现乱码的解决方案
  5. 华为STP相关功能配置
  6. Bugku-Web-速度要快-WriteUp
  7. linux定时任务页面管理平台jobx
  8. 黑客事件中如何实现利益最大化?
  9. 【总结】大端、小端存储模式的那点事
  10. DFS/并查集 Codeforces Round #286 (Div. 2) B - Mr. Kitayuta's Colorful Graph