Фильтрация плохих слов в MUD Game

В моей игре C ++ MUD я хочу, чтобы игрок не мог вводить ругательства. Вы все знаете, что они, не нужно примеров. Итак, я попробовал что-то вроде этого:

vector<string> vulger = { "You know what goes in here");

void Player::SendString(const std::string& p_string)
{
for (vector<string>::iterator it = vulger.begin(); it != vulger.end(); ++it)
{
if (!p_string.compare(*it) || !p_string.find(*it))
{
//Testing what words are been neglected by the if statement.
//cout << *it;
Conn()->Protocol().SendString(*Conn(), p_string + newline);
}
}

}

Но все, что это делает, это перебирает строки, которые отправляются в сеть. Включая объявления.

Кто-нибудь может увидеть, что я делаю не так или предложить что-нибудь, может быть?

0

Решение

Изменить || в вашем if заявление к &&:

    void Player::SendString(const std::string& p_string)
{
for (vector<string>::iterator it = vulger.begin(); it != vulger.end(); ++it)
{
#if 0
// Original:
if (!p_name.compare(*it) && !p_name.find(*it))
{
Conn()->Protocol().SendString(*Conn(), p_string + newline);
}
else
{
cout << "Vulgar word found: " << *it << "\n";
}
#else
// Edit 1:  Changed ordering.
if ((p_name == *it) || (p_name.find(*it) != std::string::npos))
{
cout << "Vulgar word found: " << *it << "\n";
}
else
{
Conn()->Protocol().SendString(*Conn(), p_string + newline);
}
#endif

}
}
0

Другие решения

Вы обрабатываете возвращаемое значение std::string::find как bool, когда в действительности возвращает смещение в строку со специальным магическим значением npos если это не найдено

if (my_string.find("foo") == std::npos) {
// foo is NOT in my_string
} else {
// foo is in my_string
}
0

По вопросам рекламы [email protected]