Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
JuliLo
0 / 0 / 0
Регистрация: 24.06.2015
Сообщений: 2
#1

Поиск подстроки в строке - C++

24.06.2015, 16:31. Просмотров 682. Ответов 6
Метки нет (Все метки)

Здравствуйте. Задача такова: есть список (вообще, список большой, и не имеет в принципе ограничения, но сейчас у меня подстрок 5) подстрок, которые будут находиться в строке и если какая-то из подстрок есть в строке, то идет логирование.
C++
1
2
3
4
5
6
7
8
char szCommands[5][128]
{
    "_strafe_helper",
    "_groundstrafe",
    "_knifebot",
    "_bhop",
    "wpn_"
};
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void MyClientCommand(edict_t *pEntity)
{
    int pid = ENTINDEX(pEntity);
 
    if (pid <= 0 || pid > 32)
        RETURN_META(MRES_IGNORED);
 
    if (FStrEq(CMD_ARGV(0), "say") || FStrEq(CMD_ARGV(0), "say_team"))
        RETURN_META(MRES_IGNORED);
    
    for (int i = 0; i < ARRAYSIZE(szCommands); i++)
    {
        if (strstr(CMD_ARGV(0), szCommands[i]))
        {
            const char *szName = STRING(pEntity->v.netname);
 
            client_print_color(0, pid, "\x04[%s]\x03 %s\x01 использует запрещенную команду [\x04%s\x01].", PREFIX, szName, CMD_ARGV(0));
        }
    }
    
    RETURN_META(MRES_HANDLED);
}
Подскажите пожалуйста, как можно оптимизировать это дело? Ужасно смущает этот цикл, который будет происходить из-за любой команды, которую вводит клиент (это плагин для сервера CS 1.6, Metamod). И можно ли обойтись без создания хеш-таблицы?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
JuliLo
0 / 0 / 0
Регистрация: 24.06.2015
Сообщений: 2
30.06.2015, 21:06  [ТС]     Поиск подстроки в строке #2
Неужели никто не сможет помочь?
tnk500
113 / 117 / 25
Регистрация: 25.08.2012
Сообщений: 1,238
Завершенные тесты: 3
30.06.2015, 21:52     Поиск подстроки в строке #3
JuliLo, думаю, никак, команд в строке может быть несколько, насколько я помню. Иначе можно break поставить после if.

Кстати, для себя, откуда изучаете создание плагинов?
Renji
1709 / 1142 / 270
Регистрация: 05.06.2014
Сообщений: 3,307
01.07.2015, 00:04     Поиск подстроки в строке #4
Алгоритм Ахо - Корасика устроит?
gazlan
Нарушитель
3129 / 1904 / 285
Регистрация: 27.08.2010
Сообщений: 5,133
Записей в блоге: 1
01.07.2015, 01:34     Поиск подстроки в строке #5
Однопроходный - без вариантов. Вот здесь "Как разбить сплошную строку на слова?" AC-матчером проверялось 3,000,000+ миллиона подстрок - можете посмотреть тайминг.
Renji
1709 / 1142 / 270
Регистрация: 05.06.2014
Сообщений: 3,307
01.07.2015, 01:49     Поиск подстроки в строке #6
Цитата Сообщение от gazlan Посмотреть сообщение
Однопроходный - без вариантов.
Чем вам Ахо Корасик не однопроходный? Каждый символ нужно прочитать всего по одному разу, алгоритм имеет линейную сложность. Другое дело, что для миллиона подстрок он будет кушать очень прилично памяти под вспомогательные структуры.
gazlan
01.07.2015, 03:45     Поиск подстроки в строке
  #7

Не по теме:

Вы, вообще, читаете то, на что пишете ответы? И как с пониманием прочитанного?

Yandex
Объявления
01.07.2015, 03:45     Поиск подстроки в строке
Ответ Создать тему
Опции темы

Текущее время: 05:31. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru