假设我有一个CString对象strMain =“AAAABBCCCCCCDDBBCCCCCCDDDAA”; 我还有两个较小的字符串,比如strSmall1 =“BB”; strSmall2 = “DD”; 现在,我想替换strMain中strSmall1(“BB”)和strSmall2(“DD”)之间出现的所有字符串,比如说“KKKKKKK”
没有正则表达式,有没有办法做到这一点。我不能使用正则表达式,因为禁止在项目中添加另一个文件。
VC ++ / MFC中有没有办法做到这一点?或者你可以指点我的任何简单算法?
答案 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的解决方案(例如)可以很好地工作。