C ++函数在字符串中替换所有出现的给定子字符串

时间:2014-03-16 06:26:50

标签: c++

我想要一个带有字符串的函数,并用星号代替其字母替换给定单词的所有匹配项。我想优雅地做到这一点,就像一个真正的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 ++纯粹主义者的方式做到这一点。

1 个答案:

答案 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(),'*' );
}

我们找到了我们想要替换的单词的第一个外观。然后我们更换它。我们这样做,直到没有更多的外观,因为它们都被替换了。