如何在VC ++ / MFC中替换字符串中两个子串之间的字符串?

时间:2010-01-07 04:42:24

标签: c++ visual-c++ mfc

假设我有一个CString对象strMain =“AAAABBCCCCCCDDBBCCCCCCDDDAA”; 我还有两个较小的字符串,比如strSmall1 =“BB”; strSmall2 = “DD”; 现在,我想替换strMain中strSmall1(“BB”)和strSmall2(“DD”)之间出现的所有字符串,比如说“KKKKKKK”

没有正则表达式,有没有办法做到这一点。我不能使用正则表达式,因为禁止在项目中添加另一个文件。

VC ++ / MFC中有没有办法做到这一点?或者你可以指点我的任何简单算法?

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

psudocode:

loop over string
  if curlocation matches string strsmall1 save index break

loop over remaining string
  replace till curlocation matches string strsmall2

额外信用:

下一个作业是什么?

我的回答:

通过在循环迭代中跳过strsmall1和strsmall2的长度来加速它

答案 2 :(得分:1)

最简单的方法可能是递归地处理替换。搜索起始分隔符和结束分隔符。如果找到它们,请将一个新字符串组合在一起,该字符串由起始分隔符组成,后跟替换字符串,然后在结束分隔符后面的字符串的其余部分递归执行替换。

当然,假设您想要替换主字符串中的所有匹配项 - 如果您只想替换第一个匹配项,John Weldon的解决方案(例如)可以很好地工作。