c++ string 識別標誌位並解析標誌位後面的字元

一点灯發表於2024-10-30

解析字串中的固定標誌位
正規表示式和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]

相關文章