如何在 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 VC++

VC/MFC如何添加启动界面

MFC技巧三:VC6 单文档 替换MFC默认的菜单栏和工具栏(转)

请问下面的图片左上方的两个按钮加中间竖线用vc++中的MFC怎么去实现?完成后,另赠100分。

关于VC++ MFC ListBox控件显示数据的问题

如何在 VC++ 的 MFC 中添加 GUI 元素,然后使用用户输入的值?