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

Сравнение строк без нескольких символов - C++

Восстановить пароль Регистрация
 
uburuntu
 Аватар для uburuntu
94 / 94 / 29
Регистрация: 04.10.2012
Сообщений: 188
20.02.2014, 21:02     Сравнение строк без нескольких символов #1
Здравствуйте, у меня вопрос по сабжу.
Есть задание на написание парсера, всё бы хорошо, только не знаю как оптимально сравнивать строки за исключением некоторых символов.

В общем так: есть строка, к примеру, name и есть входная строка str.
В строке str:
  • "%" соответствует 0 или более любым символов
  • "-" соответствует 1 любому символу
Например: Iv%

И, соответственно, вопрос: как можно реализовать их сравнение самым адекватным способом?

Добавлено через 1 час 47 минут
В качестве помощи сойдет и правильный запрос в гугл.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.02.2014, 21:02     Сравнение строк без нескольких символов
Посмотрите здесь:

Сравнение символов C++
C++ довести до ума код .сравнение двух строк и вывод общих символов
Осуществить сравнение первых n символов двух строк C++
C++ Сравнение двух строк без учета пробелов
C++ Ввод нескольких строк или массив строк
C++ Чтение и сравнение символов из файла без использования массива
C++ Сравнение строк string без учета регистра
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryS
Модератор
6403 / 4869 / 447
Регистрация: 14.02.2011
Сообщений: 16,158
20.02.2014, 21:05     Сравнение строк без нескольких символов #2
Цитата Сообщение от uburuntu Посмотреть сообщение
"%" соответствует 0 или более любым символов "-" соответствует 1 любому символу
я конечно не уверен но классический вариант
* соответствует 0 или более любым символов
? соответствует 1 любому символу
попробуй может string это поддерживает
вроде CString из MFC поддерживает
uburuntu
 Аватар для uburuntu
94 / 94 / 29
Регистрация: 04.10.2012
Сообщений: 188
20.02.2014, 21:35  [ТС]     Сравнение строк без нескольких символов #3
Цитата Сообщение от ValeryS Посмотреть сообщение
я конечно не уверен но классический вариант
* соответствует 0 или более любым символов
? соответствует 1 любому символу
Да, так и есть, просто в моем случае это % и -.

Собственно, сравнение можно реализовать хитрыми сплетениями функций из cstring, просто думал может какие-то идеи реализации подскажут
ValeryS
Модератор
6403 / 4869 / 447
Регистрация: 14.02.2011
Сообщений: 16,158
20.02.2014, 22:05     Сравнение строк без нескольких символов #4
ну расчет ? (-) могу предложить такую конструкцию
C++
1
2
3
4
5
6
7
for(int i=0;i<strlen a;i++)
 {
  if(a[i]=='-')
    contine;
 if(a[i]!=b[i])
   return false;
 }
а насчет * (%) пока ничего в голову не приходит
KOPOJI
Модератор
 Аватар для KOPOJI
16574 / 6515 / 400
Регистрация: 12.06.2012
Сообщений: 19,534
Завершенные тесты: 1
20.02.2014, 22:11     Сравнение строк без нескольких символов #5
Цитата Сообщение от ValeryS Посмотреть сообщение
а насчет * (%) пока ничего в голову не приходит
в этом случае просто искать следующий/предыдущий указанный символ. Например, если в поиске указано foo%bar, то искать сначала foo, затем сразу bar. Неважно, сколько там символов в строке между foo и bar (и есть ли вообще).
З.Ы. Имхо, Вы несколько неверно поняли задачу - имеется в виду не то, что означает * в регулярках, а то, что обозначает % в, например, SELECT ... LIKE .... в SQL. Просто любые символы, равно как и их отсутствие (т.е., в регулярках это будет ".*?")
uburuntu
 Аватар для uburuntu
94 / 94 / 29
Регистрация: 04.10.2012
Сообщений: 188
20.02.2014, 22:51  [ТС]     Сравнение строк без нескольких символов #6
Спасибо за советы.

Цитата Сообщение от KOPOJI Посмотреть сообщение
например, SELECT ... LIKE .... в SQL
Вы попали в точку, задача как раз на написание базульки данных :)
ValeryS
Модератор
6403 / 4869 / 447
Регистрация: 14.02.2011
Сообщений: 16,158
20.02.2014, 23:02     Сравнение строк без нескольких символов #7
Цитата Сообщение от KOPOJI Посмотреть сообщение
в этом случае просто искать следующий/предыдущий указанный символ.
эт то понятно
вопрос как искать?
еще один цикл вводить ?
не, ну можно конечно штатными средствами но
Цитата Сообщение от uburuntu Посмотреть сообщение
сравнение можно реализовать хитрыми сплетениями функций из cstring,просто думал может какие-то идеи реализации подскажут
а если можно то в строке заменить % на* -на ? и загнать в сравнение строк
DrOffset
6783 / 3994 / 916
Регистрация: 30.01.2014
Сообщений: 6,812
20.02.2014, 23:12     Сравнение строк без нескольких символов #8
Для реализации словарного поиска, поиска по маске неплохо подходит ternary_tree.
Будет быстро.
Есть реализации для С++ с STL-like интерфейсом.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.02.2014, 23:29     Сравнение строк без нескольких символов
Еще ссылки по теме:

C++ Вывод числа в столбик с первой цифры, без массива, без строк
C++ Сравнение строк без учета имеющегося в строке числа
Получить из данных строк S1 и S2 новую строку, содержащую первые N1 символов S1 и последние N2 символов S2 C++
Преобразовать заданные строки, согласно условию (сортировка и сравнение строк, вставка/удаление символов) C++
C++ Создайте функцию strcmp – сравнение двух строк, учитывая регистр символов

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

Или воспользуйтесь поиском по форуму:
KOPOJI
Модератор
 Аватар для KOPOJI
16574 / 6515 / 400
Регистрация: 12.06.2012
Сообщений: 19,534
Завершенные тесты: 1
20.02.2014, 23:29     Сравнение строк без нескольких символов #9
Цитата Сообщение от ValeryS Посмотреть сообщение
вопрос как искать?
Вариантов, в общем, много.. Можно с использованием цикла и обычной прогонкой.. Можно копировать в строку найденное до символа "%", затем найденное после "%" и сравнивать строки.. Можно, как написали выше, использовать другие решения..
Yandex
Объявления
20.02.2014, 23:29     Сравнение строк без нескольких символов
Ответ Создать тему
Опции темы

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