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

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

Восстановить пароль Регистрация
 
JuliLo
0 / 0 / 0
Регистрация: 24.06.2015
Сообщений: 2
24.06.2015, 16:31     Поиск подстроки в строке #1
Здравствуйте. Задача такова: есть список (вообще, список большой, и не имеет в принципе ограничения, но сейчас у меня подстрок 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). И можно ли обойтись без создания хеш-таблицы?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.06.2015, 16:31     Поиск подстроки в строке
Посмотрите здесь:

C++ Поиск подстроки в строке
C++ Поиск подстроки в строке
Поиск подстроки в строке C++
C++ Поиск подстроки в строке
C++ Поиск подстроки в строке
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
JuliLo
0 / 0 / 0
Регистрация: 24.06.2015
Сообщений: 2
30.06.2015, 21:06  [ТС]     Поиск подстроки в строке #2
Неужели никто не сможет помочь?
tnk500
113 / 117 / 25
Регистрация: 25.08.2012
Сообщений: 1,211
Завершенные тесты: 3
30.06.2015, 21:52     Поиск подстроки в строке #3
JuliLo, думаю, никак, команд в строке может быть несколько, насколько я помню. Иначе можно break поставить после if.

Кстати, для себя, откуда изучаете создание плагинов?
Renji
1533 / 981 / 239
Регистрация: 05.06.2014
Сообщений: 2,950
01.07.2015, 00:04     Поиск подстроки в строке #4
Алгоритм Ахо - Корасика устроит?
gazlan
2855 / 1803 / 271
Регистрация: 27.08.2010
Сообщений: 4,883
Записей в блоге: 1
01.07.2015, 01:34     Поиск подстроки в строке #5
Однопроходный - без вариантов. Вот здесь "Как разбить сплошную строку на слова?" AC-матчером проверялось 3,000,000+ миллиона подстрок - можете посмотреть тайминг.
Renji
1533 / 981 / 239
Регистрация: 05.06.2014
Сообщений: 2,950
01.07.2015, 01:49     Поиск подстроки в строке #6
Цитата Сообщение от gazlan Посмотреть сообщение
Однопроходный - без вариантов.
Чем вам Ахо Корасик не однопроходный? Каждый символ нужно прочитать всего по одному разу, алгоритм имеет линейную сложность. Другое дело, что для миллиона подстрок он будет кушать очень прилично памяти под вспомогательные структуры.
gazlan
01.07.2015, 03:45     Поиск подстроки в строке
  #7

Не по теме:

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

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

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