【问题标题】:How to replace a string between two substrings in a string in VC++/MFC?如何在 VC++/MFC 中的字符串中替换两个子字符串之间的字符串?
【发布时间】:2010-01-07 04:42:23
【问题描述】:

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

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

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

【问题讨论】:

    标签: c++ visual-c++ 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 的长度来加速它

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-04-22
          • 2017-04-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多