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

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

Войти
Регистрация
Восстановить пароль
 
Xfaider
11 / 11 / 1
Регистрация: 27.10.2012
Сообщений: 26
#1

Маска, алгоритм решения - C++

05.03.2013, 23:47. Просмотров 660. Ответов 4
Метки нет (Все метки)

Условия таковы: на вход программы подается маска, некий фильтр, далее за ней идут строки с какими то словами/именами файлов, необходимо по маске определить, подходит ли под фильтр данная строка или нет. Написать рекурсивным методом.
Спец. символы таковы:
* - любая последовательность символов( в том числе пустота)
? - любой символ
Имеется ввиду под "любой символ" буквы английского алфавита и стандартные знаки препинания(кроме спец. символов конечно).
Уже пытался написать, да и не выходит, не могу придумать самого алгоритма.
Прошу помочь именно с идеей, кода решения не надо, да и не люблю в чужом коде копаться, хочу сам додуматься как реализовать, а вот сам алгоритм пока не додумался. Предполагал делить маску на некие части, относительно которых потом будет проверка тоже куска строки, но вариаций достаточно полно даже с этими двумя символами. Проблем бы не было написать для определенной маски, а так ничего в голову не приходит.
Пример:
*?abc*.*?e
abc.exe - не пройдет фильтр
alabcabc.dle - пройдет фильтр
123llabc.e - не пройдет фильтр
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.03.2013, 23:47
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Маска, алгоритм решения (C++):

Алгоритм решения задачи - C++
Есть вот такая вот задача . На дороге в некоторых местах разбросаны золотые монеты. Для каждой монеты известно ее местоположение, которое...

Алгоритм решения задачи - C++
Помогите пожалуйста сделать алгоритм по коду, из блоков и стрелочек Вот код: //Библиотека контейнера #include<list> //Библиотека...

Алгоритм решения рекурсивных функций - C++
Цель: Прошу подсказать алгоритм решения рекурсивной функции. Задача:

Разработать алгоритм и программу решения в C++ - C++
1-задача) уравнения: Ax + B = 0 2-задача) системы уравнений: - A1*x + B1*y = C1 {- -A2*x + B2*y = C2

Составить алгоритм решения уравнения |a+5x|/(b-x)=2c - C++
Пожалуйста помогите составить алгоритм решения уравнения |a+5x|/(b-x)=2c буду очень благодарен.

Какой правильный алгоритм решения?:) - C++
Даны натуральные числа n и a(1), a(2), ... a(n) .. Найти максимальное простое число. Всем доброго дня:jokingly: Помогите пожалуйста с...

4
fuelcs
12 / 12 / 0
Регистрация: 23.01.2013
Сообщений: 143
06.03.2013, 00:47 #2
мне кажется не совсем корректный пример - что значит последовательность *? (любые символы плюс еще один любой )))
а по сути могу предложить сравнивать строку с фильтром слева-направо
1) первый символ *,? или "A-z" (или другие символы)
a) если *,? то искать то что идет в фильтре за ним, то есть дать должно быть "A-z"
б) если "A-z" - проверять или совпадает последовательность дальше идущая до специального символа...
и т.д...

Добавлено через 20 минут
Или другая идея...
Найти в строке совпадения не специальных символов, а потом проверить что между (вокруг их)... и все...
пример:
*abc?.dl?

1235abc7.dll

находим abc, dl
проверяем если символы впереди abc
проверяем что бы между ними был один любой символ и точка
проверяем есть ли символ после после dl
0
Xfaider
11 / 11 / 1
Регистрация: 27.10.2012
Сообщений: 26
06.03.2013, 00:49  [ТС] #3
Цитата Сообщение от fuelcs Посмотреть сообщение
мне кажется не совсем корректный пример - что значит последовательность *? (любые символы плюс еще один любой )))
а по сути могу предложить сравнивать строку с фильтром слева-направо
1) первый символ *,? или "A-z" (или другие символы)
a) если *,? то искать то что идет в фильтре за ним, то есть дать должно быть "A-z"
б) если "A-z" - проверять или совпадает последовательность дальше идущая до специального символа...
и т.д...
Не пойдет, ограничений для маски нет, разве что нет смысла ставить две * подряд
Маска может быть и *??*?*?* , а под такую пойдет абсолютно любое имя , если символов 4 и более, так что повторюсь, вариаций много.

Да но вдруг под * стоит такое же abc? К примеру: 123abc231abc7.dll
Это тоже без ограничений, говорю же, определенный случай - слишком просто =/
0
fuelcs
12 / 12 / 0
Регистрация: 23.01.2013
Сообщений: 143
06.03.2013, 14:40 #4
Добавлено через 12 часов 46 минут
Есть маска MASK: * abc ? ab * . ? b ?
Есть строка STRING: 123ababc123abc1ab123.1b2
Создаем массив MASK2 из наборов не специальных символов (не * ?), которые имеются в маске:
abc , ab , . , b.
Формируем свою строку STRING2, в цикле ищем совпадения наборов из MASK2 и STRING:
***ababc***abc*ab***.*b* (*– нет совпадений)
Заменяем отдельно стоящую звездочку (*) на знак вопроса(?):
***ababc***abc?ab***.?b?
Формируем строку STRING3, где заменяем несколько звездочек подряд строки STRING2 на одну звездочку.
*ababc*abc?ab*.?b?
Далее ищем вхождение MASK в STRING3 (примечание: ? из строки соответствует * из маски, но не наоборот)
И все, кажется, ничего не упустил...
0
gazlan
3132 / 1908 / 285
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
06.03.2013, 15:41 #5
Посмотрите здесь: http://en.wikipedia.org/wiki/Glob_%28programming%29
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.03.2013, 15:41
Привет! Вот еще темы с ответами:

предложите свой алгоритм решения - C++
Множество попарно различных плоскостей в трехмерном пространстве задано перечислением троек точек, через которые проходит каждая из...

Класс стек, алгоритм решения - C++
Вот условие: Описать класс, реализующий стек. Написать программу, использующую этот класс для моделирования Т-образного сортировочного...

Подскажите алгоритм решения задачи - C++
Подскажите пожалуйста алгоритм решения этой задачи: Дано n точек на плоскости. Указать (n-1)-звенную несамопересекающуюся незамкнутую...

Составить алгоритм решения ребуса - C++
составить алгоритм решения ребуса МУХА+МУХА+МУХА=СЛОН(различные буквы означают различные цифры, старшая - не 0)


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Yandex
Объявления
06.03.2013, 15:41
Ответ Создать тему
Опции темы

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