2015-11-22 7 views
0

Так что я делаю фильтр для оскорбительных слов для этой игры, над которыми я занимаюсь программированием, и если оскорбительное слово содержит пробел, моя программа мгновенно падает. Если слово не содержит пробела, слово правильно заменяется на 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

Во-первых, вы сравниваете строки C во время работы со строкой C++. Нет необходимости в этом, строка уже имеет операторы сравнения. Во-вторых, remove_if возвращает прошлый итератор для нового диапазона строки GetChatFilter() -> GetLastFilteredStr(). Затем вы применяете стирание для этого недавно созданного итератора конца и конца и GetChatFilter() -> GetLastFilteredStr(). End(), который является старым итератором прошлого конца. Это не выглядит хорошо для меня. Итак, почему бы не использовать remove_if() на строке GetChatFilter() -> GetLastFilteredStr(), чтобы удалить пробел?

Смежные вопросы