猿问
下载APP

用另一个子串C ++替换substring


用另一个子串C ++替换substring

我怎么能用C ++中的另一个子字符串替换字符串中的子字符串,我可以使用哪些函数?

eg: string test = "abc def abc def";test.replace("abc", "hij").replace("def", "klm"); //replace occurrence of abc and def with other substring


斯蒂芬大帝
浏览 26回答 3
3回答

繁星coding

C ++中没有一个内置函数可以做到这一点。如果您想将一个子字符串的所有实例替换为另一个子字符串,可以通过混合调用string::find和来实现string::replace。例如:size_t index = 0;while (true) {      /* Locate the substring to replace. */      index = str.find("abc", index);      if (index == std::string::npos) break;      /* Make the replacement. */      str.replace(index, 3, "def");      /* Advance index forward so the next iteration doesn't pick it up as well. */      index += 3;}在这段代码的最后一行,我增加index了插入字符串的字符串的长度。在这个特定的例子中 - 替换"abc"为"def"- 这实际上不是必需的。但是,在更一般的设置中,跳过刚刚替换的字符串非常重要。例如,如果要替换"abc"为"abcabc",而不跳过新替换的字符串段,则此代码将持续替换部分新替换的字符串,直到内存耗尽为止。独立地,无论如何跳过这些新角色可能稍快一些,因为这样做可以节省一些时间和精力string::find。希望这可以帮助!

慕妹3242003

Boost字符串算法库方式:#include&nbsp;<boost/algorithm/string/replace.hpp>{&nbsp;//&nbsp;1.&nbsp; &nbsp;&nbsp;string&nbsp;test&nbsp;=&nbsp;"abc&nbsp;def&nbsp;abc&nbsp;def"; &nbsp;&nbsp;boost::replace_all(test,&nbsp;"abc",&nbsp;"hij"); &nbsp;&nbsp;boost::replace_all(test,&nbsp;"def",&nbsp;"klm");}{&nbsp;//&nbsp;2. &nbsp;&nbsp;string&nbsp;test&nbsp;=&nbsp;boost::replace_all_copy&nbsp;&nbsp;(&nbsp;&nbsp;boost::replace_all_copy<string>("abc&nbsp;def&nbsp;abc&nbsp;def",&nbsp;"abc",&nbsp;"hij") &nbsp;&nbsp;,&nbsp;&nbsp;"def" &nbsp;&nbsp;,&nbsp;&nbsp;"klm" &nbsp;&nbsp;);}

侃侃尔雅

我认为如果替换字符串的长度与要替换的字符串的长度不同,则所有解决方案都将失败。(搜索“abc”并替换为“xxxxxx”)一般方法可能是:void&nbsp;replaceAll(&nbsp;string&nbsp;&s,&nbsp;const&nbsp;string&nbsp;&search,&nbsp;const&nbsp;string&nbsp;&replace&nbsp;)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;for(&nbsp;size_t&nbsp;pos&nbsp;=&nbsp;0;&nbsp;;&nbsp;pos&nbsp;+=&nbsp;replace.length()&nbsp;)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Locate&nbsp;the&nbsp;substring&nbsp;to&nbsp;replace &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pos&nbsp;=&nbsp;s.find(&nbsp;search,&nbsp;pos&nbsp;); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;pos&nbsp;==&nbsp;string::npos&nbsp;)&nbsp;break; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Replace&nbsp;by&nbsp;erasing&nbsp;and&nbsp;inserting &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.erase(&nbsp;pos,&nbsp;search.length()&nbsp;); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.insert(&nbsp;pos,&nbsp;replace&nbsp;); &nbsp;&nbsp;&nbsp;&nbsp;}}
打开App,查看更多内容
随时随地看视频慕课网APP
我要回答