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

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

Войти
Регистрация
Восстановить пароль
 
uburuntu
94 / 94 / 29
Регистрация: 04.10.2012
Сообщений: 189
#1

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

20.02.2014, 21:02. Просмотров 435. Ответов 8
Метки нет (Все метки)

Здравствуйте, у меня вопрос по сабжу.
Есть задание на написание парсера, всё бы хорошо, только не знаю как оптимально сравнивать строки за исключением некоторых символов.

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

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

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

Сравнение строк без учёта регистра - C++
Доброго времени суток. Функция strcmp сравнивает 2 строки с учётом регистра, а как можно сравнить без учёта?

Чтение и сравнение символов из файла без использования массива - C++
Здравствуйте, подскажите, как можно реализовать посимвольное чтение 2-х (3-х) файлов, при котором символ из 1-го файла сравнивается с...

Осуществить сравнение первых n символов двух строк - C++
Осуществить сравнение первых n символов двух строк. printf ("Сравнение З букв в Аbс и Abc %d\n", strncmp("Abc", "Abc", 3)); ...

Сравнение двух строк и вывод общих символов - C++
#include <iostream> using namespace std; void main() { char str; char strl;

Сравнение двух строк без учета пробелов - C++
Пишем в Microsoft Visual Studio 2010 -> Win32 Console Application -> C++ Задача такова: написать программу которая сравнивает две строки...

Сравнение строк string без учета регистра - C++
Есть уже реализованная стандартная функция для решения такой задачи? Делал это через перевод обоих строк в нижний регистр и оператор...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ValeryS
Модератор
6556 / 5022 / 464
Регистрация: 14.02.2011
Сообщений: 16,763
20.02.2014, 21:05 #2
Цитата Сообщение от uburuntu Посмотреть сообщение
"%" соответствует 0 или более любым символов "-" соответствует 1 любому символу
я конечно не уверен но классический вариант
* соответствует 0 или более любым символов
? соответствует 1 любому символу
попробуй может string это поддерживает
вроде CString из MFC поддерживает
uburuntu
94 / 94 / 29
Регистрация: 04.10.2012
Сообщений: 189
20.02.2014, 21:35  [ТС] #3
Цитата Сообщение от ValeryS Посмотреть сообщение
я конечно не уверен но классический вариант
* соответствует 0 или более любым символов
? соответствует 1 любому символу
Да, так и есть, просто в моем случае это % и -.

Собственно, сравнение можно реализовать хитрыми сплетениями функций из cstring, просто думал может какие-то идеи реализации подскажут
ValeryS
Модератор
6556 / 5022 / 464
Регистрация: 14.02.2011
Сообщений: 16,763
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
Модератор
Эксперт HTML/CSSЭксперт PHP
16695 / 6621 / 431
Регистрация: 12.06.2012
Сообщений: 19,875
Завершенные тесты: 1
20.02.2014, 22:11 #5
Цитата Сообщение от ValeryS Посмотреть сообщение
а насчет * (%) пока ничего в голову не приходит
в этом случае просто искать следующий/предыдущий указанный символ. Например, если в поиске указано foo%bar, то искать сначала foo, затем сразу bar. Неважно, сколько там символов в строке между foo и bar (и есть ли вообще).
З.Ы. Имхо, Вы несколько неверно поняли задачу - имеется в виду не то, что означает * в регулярках, а то, что обозначает % в, например, SELECT ... LIKE .... в SQL. Просто любые символы, равно как и их отсутствие (т.е., в регулярках это будет ".*?")
uburuntu
94 / 94 / 29
Регистрация: 04.10.2012
Сообщений: 189
20.02.2014, 22:51  [ТС] #6
Спасибо за советы.

Цитата Сообщение от KOPOJI Посмотреть сообщение
например, SELECT ... LIKE .... в SQL
Вы попали в точку, задача как раз на написание базульки данных :)
ValeryS
Модератор
6556 / 5022 / 464
Регистрация: 14.02.2011
Сообщений: 16,763
20.02.2014, 23:02 #7
Цитата Сообщение от KOPOJI Посмотреть сообщение
в этом случае просто искать следующий/предыдущий указанный символ.
эт то понятно
вопрос как искать?
еще один цикл вводить ?
не, ну можно конечно штатными средствами но
Цитата Сообщение от uburuntu Посмотреть сообщение
сравнение можно реализовать хитрыми сплетениями функций из cstring,просто думал может какие-то идеи реализации подскажут
а если можно то в строке заменить % на* -на ? и загнать в сравнение строк
DrOffset
7092 / 4233 / 950
Регистрация: 30.01.2014
Сообщений: 7,008
20.02.2014, 23:12 #8
Для реализации словарного поиска, поиска по маске неплохо подходит ternary_tree.
Будет быстро.
Есть реализации для С++ с STL-like интерфейсом.
KOPOJI
Модератор
Эксперт HTML/CSSЭксперт PHP
16695 / 6621 / 431
Регистрация: 12.06.2012
Сообщений: 19,875
Завершенные тесты: 1
20.02.2014, 23:29 #9
Цитата Сообщение от ValeryS Посмотреть сообщение
вопрос как искать?
Вариантов, в общем, много.. Можно с использованием цикла и обычной прогонкой.. Можно копировать в строку найденное до символа "%", затем найденное после "%" и сравнивать строки.. Можно, как написали выше, использовать другие решения..
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.02.2014, 23:29
Привет! Вот еще темы с ответами:

Сравнение строк без учета имеющегося в строке числа - C++
Есть строка содержащая слово и через пробел число, потом еще одно слово. Число может быть абсолютно любым, самое главное чтобы оно было....

Создайте функцию strcmp – сравнение двух строк, учитывая регистр символов - C++
Всем привет :) Объясните , пожалуйста, почему не работает программа (работает неправильно ). Несмотря на то , что строки одинаковые ,...

Преобразовать заданные строки, согласно условию (сортировка и сравнение строк, вставка/удаление символов) - C++
Даны строки A и B. Если все символы A входят в B и в B есть повторяющиеся символы, то упорядочить символы B в порядке, обратном к...

Ввод нескольких строк или массив строк - C++
У меня есть массив строк. Нужно ввести несколько строк, но не получается. Вот код: int main() { const int n=4; const int...


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

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

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