所以我正在为这个游戏做一个滥用词语的过滤器,我正在做一些编程,如果滥用的词包含空格,我的程序会立即崩溃。如果单词不包含空格,则该单词将被 beep 正确替换。我想知道是否有人知道为什么会发生这种情况。我如何替换这个词的例子:
if (ContainsAbusiveWord(strMsg.c_str()))
{
if (stricmp(strMsg.c_str(), GetChatFilter()->GetLastFilteredStr().c_str()))
{
if (m_nLastAbuseTime < 1) //if user isn't chat blocked
{
for (int i = 0; i < GetChatFilter()->GetLastFilteredStr().length(); ++i)
{
if (isspace(i))
{
GetChatFilter()->GetLastFilteredStr().erase((remove_if(GetChatFilter()->GetLastFilteredStr().begin(), GetChatFilter()->GetLastFilteredStr().end(), isspace), GetChatFIlter()->GetLastFilteredStr().end()));
strMsg.replace(strMsg.find(GetChatFilter()->GetLastFilteredStr()), GetChatFilter()->GetLastFilteredStr().size()-1, "*beep*", GetChatFilter()->GetLastFilteredStr().length() - 1);
}
}
strMsg.replace(strMsg.find(GetChatFilter()->GetLastFilteredStr()), GetChatFilter()->GetLastFilteredStr().size(), "*beep*", GetChatFilter()->GetLastFilteredStr().length());
}
else
{
return false; //don't send the message
}
}
}
答案 0 :(得分:0)
首先,您在使用C ++字符串时比较C字符串。不需要,字符串已经有比较运算符。 其次, remove_if 返回字符串 GetChatFilter() - &gt; GetLastFilteredStr()的新范围的过去迭代器。然后,为新创建的past-the-end-iterator和 GetChatFilter() - &gt; GetLastFilteredStr()。end()应用erase,这是旧的past-the-end迭代器。这对我来说不太好看。 那么,为什么不在字符串 GetChatFilter() - &gt; GetLastFilteredStr()上使用 remove_if()来删除空格?