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

解析字符串中的固定标志位
正则表达式和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]
posted @ 2024-10-31 09:52  一点灯  阅读(5)  评论(0编辑  收藏  举报