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

0

В моей игре 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);
        }
    }

    }

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

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

  • 3
    Ваш параметр называется p_string , но вы используете !p_name внутри вашего цикла. Что такое p_name ?
  • 0
    Извините, они просто опечатки, я буду редактировать их сейчас.
Показать ещё 5 комментариев
Теги:
validation
mud

2 ответа

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
    В результате тестирования я обнаружил, что весь список печатается, а не только более простое слово при его вводе.
  • 0
    Смотрите мои изменения, «Редактировать 1». Я упростила логику, если слово вульгарно, печатать, иначе отправлять слово
Показать ещё 5 комментариев
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
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню