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

C++ 如何在VC+;中替换字符串中两个子字符串之间的字符串+/MFC?,c++,visual-c++,mfc,C++,Visual C++,Mfc,假设我有一个CString对象strMain=“aaaabbccccccddbbccccddda”; 我还有两个较小的字符串,比如strSmall1=“BB”; strSmall2=“DD”; 现在,我想用“kkkk”替换strSmall1(“BB”)和strSmall2(“DD”)之间出现的字符串 有没有一种不用正则表达式的方法。我不能使用正则表达式,因为禁止向项目中添加其他文件 在VC++/MFC中有没有办法做到这一点?或者您可以给我指出的任何简单算法?psudocode: loop ove

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

有没有一种不用正则表达式的方法。我不能使用正则表达式,因为禁止向项目中添加其他文件

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

psudocode:

loop over string
  if curlocation matches string strsmall1 save index break

loop over remaining string
  replace till curlocation matches string strsmall2
额外学分:

下一个作业是什么

我的答覆是:


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

最简单的方法可能是递归地处理替换。搜索起始分隔符和结束分隔符。如果找到它们,请将一个新字符串放在一起,该字符串由起始分隔符之前的字符串组成,后面是替换字符串,后面是在结束分隔符之后的剩余字符串中递归执行替换的返回值

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
当然,这是假设您希望替换主字符串中的所有匹配项——如果您只想替换第一个,那么John Weldon的解决方案(例如)将非常有效