首页 > 编程语言 >c++ string 识别标志位并解析标志位后面的字符

c++ string 识别标志位并解析标志位后面的字符

时间:2024-10-31 09:41:38浏览次数:5  
标签:标志 std end string iterator c++ curPos inPutStr

解析字符串中的固定标志位
正则表达式和iterator的配合应用

#include <string>
#include <map>
#include <regex>
#include <iostream>
/
/替换\\M+后面的字符
// \\M+195B6 替换为 文
std::regex pattern(R"(\\M+[^\\M]*)"); // 匹配 \\M+ 后跟任意非 \\M 的字符(0次或多次)  
std::string CalM_Replcace(std::string inPutStr) {
	std::string result;
	// 正则表达式模式,匹配 \\M+ 和后面的部分作为一个整体  
	std::sregex_iterator iter(inPutStr.begin(), inPutStr.end(), pattern);
	std::sregex_iterator end;
	std::string::const_iterator search_start(inPutStr.cbegin());

	while (iter != end) {
		std::smatch match = *iter;
		auto curPos = match.position();
		if (curPos > 0)
		{
			result += inPutStr.substr(0, curPos);
			inPutStr = inPutStr.erase(0, curPos); // 从找到的位置开始,删除3个字符 
			iter = std::sregex_iterator(inPutStr.begin(), inPutStr.end(), pattern);
			continue;
		}
		if (curPos == 0)
		{
			//删除  \\M+
			inPutStr = inPutStr.erase(0, 3); // 从找到的位置开始,删除3个字符 

			//截取内容
			std::string substring = inPutStr.substr(0, 5);
			inPutStr = inPutStr.erase(0, 5);
			// 添加替换后的部分(即 J)  
			if (mapChineseSign.find(substring) != mapChineseSign.end())
			{
				result += mapChineseSign[substring]

标签:标志,std,end,string,iterator,c++,curPos,inPutStr
From: https://www.cnblogs.com/yzxxty/p/18517051

相关文章

  • C++多线程应用
    一个进程就是一个程序,一个程序里不止一个功能,每个功能的实现就可以交给一个线程去完成。一个进程就像是一个工程,这个工程里,有设计,有监理,有施工,就相当于三个线程,各干各的又相互配合。https://cplusplus.com/reference/thread/thread/thread/是C++的官方参考,个人觉得比较权威,比经......
  • C++ 模板专题 - 标签分派(Tag Dispatching)
    一:概述:        在C++中,TagDispatching是一种编程技巧,主要用于在编译期根据不同的类型或特征选择不同的函数重载或代码分支。TagDispatching借助类型标签(tags)进行函数调度,用于在模板中实现编译期的静态分派。这种方法特别适合在泛型编程中根据类型特性(如迭代器......
  • C++:二叉搜索树(迭代)
    文章目录前言一、二叉搜索树1.二叉搜索树的概念2.二叉搜索树的操作1)遍历2)查找3)插入4)删除二、二叉搜索树的实现(迭代版本)1.二叉搜索树的结构定义2.二叉搜索树的插入3.二叉搜索树遍历4.二叉搜索树删除5.二叉搜索树查找6.二叉搜索树代码总结总结前言今天来学......
  • 深入理解 C/C++ 中的 do-while 语句及其应用
    在C/C++编程中,do-while语句是一个重要的控制结构。它的独特之处在于,无论条件是否满足,循环体至少会执行一次。尽管do-while的基本用途是循环,但它在其他编程场合中同样具有非常巧妙和实用的应用。本文将探讨do-while语句的基本用法及其在宏定义和函数中的应用,提供高效......
  • 【信奥赛·算法基础】插入排序:算法解析与C++实现
    序言插入排序(InsertionSort)是一种简单的排序算法,就像是我们在打扑克牌时,整理手中牌的过程。一、基本原理插入排序的基本思想是:将待排序的元素插入到已经有序的部分序列中合适的位置,直到所有元素都插入完毕,整个序列就变为有序序列。二、算法步骤从第二个元素开始(假设第......
  • 【C++】踏上C++学习之旅(四):细说“内联函数“的那些事
    文章目录前言1."内联函数"被创造出来的意义2.内联函数的概念2.1内联函数在代码中的体现2.2普通函数和内联函数的汇编代码3.内联函数的特性(重点)4.总结前言本章来聊一聊C++的创作者"本贾尼"大佬,为什么要创作出内联函数,以及内联函数的定义和内联函数的实现机制等......
  • [C++] 成员函数指针和函数指针
    #include<iostream>usingnamespacestd;classA{public:A(inta):_a(a){}int_a;void*get_ptr(){returnthis;};voidp(intc){cout<<"_a:"<<_a<<endl;};};intint_func(inta,floatb){......
  • 管中窥豹----从String Intern中观察.NET Core到.NET 8 托管堆的变迁
    简介https://www.cnblogs.com/lmy5215006/p/18494483在研究.NETString底层结构时,我所观察到的情况与《.NETCore底层入门》,《.NET内存管理宝典》书中描述不符。故多研究了一下。发现.NET托管堆的结构也是越来越多,越来越高性能。 //示例代码internalclassProgram{......
  • Array and string offset access syntax with curly braces is deprecated
    你遇到的这个问题确实是因为PHP版本升级后对一些语法的支持发生了变化。具体来说,从PHP7.4开始,使用大括号 {} 访问数组和字符串的偏移已经被弃用,并将在未来的版本中完全移除。因此,你需要对代码进行相应的调整。解决方法方法一:降级PHP版本更改PHP版本为7.0以下的版本:如果你......
  • 【2024华为OD-E卷-200分-任务最优调度】(题目+思路+Java&C++&Python解析+在线测试)
    在线评测链接题目内容给定一个正整数数组表示待系统执行的任务列表,数组的每一个元素代表一个任务,元素的值表示该任务的类型。请计算执行完所有任务所需的最短时间。任务执行规则如下:任务可以按任意顺序执行,且每个任务执行耗时间均为111个时间单位两个同类型的......