如何在 VC++/MFC 中的字符串中替换两个子字符串之间的字符串?
Posted
技术标签:
【中文标题】如何在 VC++/MFC 中的字符串中替换两个子字符串之间的字符串?【英文标题】:How to replace a string between two substrings in a string in VC++/MFC? 【发布时间】:2010-01-07 04:42:23 【问题描述】:假设我有一个 CString 对象 strMain="AAAABBCCCCCCDDBBCCCCCCDDDAA"; 我还有两个较小的字符串,比如 strSmall1="BB"; strSmall2="DD"; 现在,我想用 strMain 中的 strSmall1("BB") 和 strSmall2("DD") 替换所有出现的字符串,比如 "KKKKKKK"
有没有办法在没有正则表达式的情况下做到这一点。我不能使用正则表达式,因为禁止向项目添加另一个文件。
在 VC++/MFC 中有没有办法做到这一点?或者您可以指出我的任何简单算法?
【问题讨论】:
【参考方案1】:int length = strMain.GetLength();
int begin = strMain.Find(strSmall1, 0) + strSmall1.GetLength();
int end = strMain.Find(strSmall2, 0);
CStringT left = strMain.Left(begin);
CStringT right = strMain.Right(length - end);
strMain = left + "KKKKKKK" + right
【讨论】:
【参考方案2】:最简单的方法可能是递归处理替换。搜索起始分隔符和结束分隔符。如果找到它们,将一个新的字符串放在一起,该字符串由一直到起始分隔符的字符串组成,后跟替换字符串,然后是在结束分隔符之后的字符串剩余部分中递归执行替换的返回。
当然,假设您想要替换主字符串中的所有匹配项——如果您只想替换第一个匹配项,John Weldon 的解决方案(例如)将非常有效。
【讨论】:
【参考方案3】:伪代码:
loop over string
if curlocation matches string strsmall1 save index break
loop over remaining string
replace till curlocation matches string strsmall2
加分:
下一个任务是什么?
我的回答:
通过在循环迭代中跳跃 strsmall1 和 strsmall2 的长度来加速它
【讨论】:
以上是关于如何在 VC++/MFC 中的字符串中替换两个子字符串之间的字符串?的主要内容,如果未能解决你的问题,请参考以下文章
MFC技巧三:VC6 单文档 替换MFC默认的菜单栏和工具栏(转)