我想要一个带有字符串的函数,并用星号代替其字母替换给定单词的所有匹配项。我想优雅地做到这一点,就像一个真正的C ++程序员。
举个例子,
int main()
{
std::string str = "crap this craping shit.";
censor_word("crap", str);
std::cout << str;
return 0;
}
应输出
"**** this ****ing shit"
我需要帮助以一种优雅的方式填写以下功能:
void censor_word(const std::string& word, std::string& text)
{
...
}
我知道Stack Overflow的天才可能会提出一个单行解决方案。
我的代码看起来很讨厌
void censor_word(const std::string& word, std::string& text)
{
int wordsize= word.size();
if (wordsize < text.size())
{
for (std::string::iterator it(text.begin()), endpos(text.size() - wordsize), int curpos = 0; it != endpos; ++it, ++curpos)
{
if (text.substr(curpos, wordsize) == word)
{
std::string repstr(wordsize, '*');
text.replace(curpos, wordsize, repstr);
}
}
}
}
教我如何以C ++纯粹主义者的方式做到这一点。
答案 0 :(得分:0)
for( auto pos = str.find( word ); pos != std::string::npos; pos = str.find( word ) )
{
str.replace( str.begin() + pos, str.begin() + pos + word.size(), word.size(),'*' );
}
我们找到了我们想要替换的单词的第一个外观。然后我们更换它。我们这样做,直到没有更多的外观,因为它们都被替换了。