|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
28.10.2017, 17:03 | #1 |
Пользователь
Регистрация: 13.11.2016
Сообщений: 15
|
Прокомментировать код (Алгоритм Бойера — Мура)
Добрый день, искал различные методы поиска подстроки в строке и наткнулся на Алгоритм Бойера — Мура, в принципе работа алгоритма понятна, начал искать реализацию и вот что нашел:
Код:
Код:
|
28.10.2017, 18:44 | #2 |
Участник клуба
Регистрация: 14.05.2016
Сообщений: 1,793
|
Если ты хочешь разобраться как работает код, то тебе надо просто по-шагово его выполнить (на конкретном примере выполнить).
Т.е. прими какие-то условия, например: Код:
При этом записывай как меняются переменные и их анализируй... Если с первого раза не получилось - пройди повторно... Со временем понимание придёт... Ты же знаешь, что в С++ строка сохраняется как обычный массив типа "char"? |
28.10.2017, 19:05 | #3 | |
Пользователь
Регистрация: 13.11.2016
Сообщений: 15
|
Цитата:
Код:
Код:
|
|
28.10.2017, 19:55 | #4 |
Участник клуба
Регистрация: 14.05.2016
Сообщений: 1,793
|
Посмотри на описание массива: "BMT[256];"... Чтобы обратится к "115-му" элементу нужно написать "BMT[115]", где "115" - это целое число (а не символ 's')...
А теперь теория: в с++ между символом "char" и "int" есть связь. Или, по другому, один и тот же символ можно приставить и как целое число и как символ. Это называется таблица ASCII: 1.jpg Обычно я использовал это свойство, когда нужно подсчитать кол-во каждого символа в строке : "tdgfr tt rr t". Создаёшь массив "int" из 256 символов (Подумай, а почему именно из 256 символов?) и каждой ячейки сохраняешь сумму. Например A[115] - это для хранения кол-ва встречения буквы 's', а A[111] - счётчик для 'o' и т.д. Возьми поиграйся с выводом разных значений: и таких (short)(substring[i]) - кстате, какой у этого выражения тип на выходе (для вывода нужно указать)? (ну раз массив int BMT[int]???) и другого вида... https://www.youtube.com/watch?v=4XX-...ature=youtu.be Последний раз редактировалось ura_111; 28.10.2017 в 20:09. |
28.10.2017, 20:07 | #6 |
Участник клуба
Регистрация: 14.05.2016
Сообщений: 1,793
|
Еще один вопрос: эквиваленты ли записи
Код:
Код:
|
28.10.2017, 20:54 | #7 |
Участник клуба
Регистрация: 14.05.2016
Сообщений: 1,793
|
Понимаешь, в Си есть такая тема как "приведение типов" - это когда из одного типа делается другой (если это возможно).
Например, из "doube" в "int" или вот пример: 2.jpg После приведения, выполняются арифметические действия (хотя изначально С- это char)... Наверное, в строчке "[(short)(substring[i])]" надо поменять "short" на "int" и тогда будет нормально смотреться, - ведь "BMT[int]". А ну пробуй, заработает программа? Последний раз редактировалось ura_111; 28.10.2017 в 20:57. |
28.10.2017, 20:59 | #8 |
Пользователь
Регистрация: 13.11.2016
Сообщений: 15
|
Да, заработала, в принципе, если не ставить ничего, ни short, ни int, то тоже работает
|
28.10.2017, 21:08 | #10 |
Участник клуба
Регистрация: 14.05.2016
Сообщений: 1,793
|
Но с этим нужно быть осторожным...
За типами нужно следить, потому что появляются ошибки: например ты присвоил: Код:
Понимаешь? |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
алгоритм Бойлера-Мура | KatyaKatch | Общие вопросы C/C++ | 1 | 03.11.2014 15:32 |
C++Проверить код и прокомментировать | Kseni564 | Помощь студентам | 0 | 11.05.2014 16:02 |
Помогите понять код (прокомментировать код шифрации на C++). | bicks | Помощь студентам | 3 | 10.12.2013 21:31 |
Автоматы Бойера- Мура | killer12rus | Помощь студентам | 1 | 21.12.2010 20:55 |
Просьба помочь разобраться с поиском в строке по алгоритму Бойера-Мура | Ветас | Помощь студентам | 1 | 16.11.2009 18:52 |