Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.10.2009, 01:37   #1
huzik
Пользователь
 
Регистрация: 04.10.2009
Сообщений: 15
По умолчанию Сравнение строк по шаблону. Регулярные выражения?

Собссно, сабж. В гугле порылся, но так ничего и не понял.
Задача: реализовать алгоритм сравнения строк по шаблону. Единственный символ маски - точка. Например, программа должна понимать, что строка .обака = собака и соб.ка = собака.

Сначала попробовал написать свой алгоритм сравнения, но мой вариант работает до неприличия медленно (порядка 4 секунд на слово), ибо сравнивать с шаблоном приходится 43 с лишним тысячи строк.

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

Visual C++, MFC, если это принципиально.

Последний раз редактировалось huzik; 15.10.2009 в 01:47.
huzik вне форума Ответить с цитированием
Старый 15.10.2009, 13:10   #2
mYziK
Пользователь
 
Регистрация: 18.09.2009
Сообщений: 38
По умолчанию

Попробуй boost::regex

http://www.solarix.ru/for_developers...ru/index.shtml
mYziK вне форума Ответить с цитированием
Старый 15.10.2009, 14:50   #3
huzik
Пользователь
 
Регистрация: 04.10.2009
Сообщений: 15
По умолчанию

Цитата:
Сообщение от mYziK Посмотреть сообщение
Йэххх Про него я уже читал, даже скачал, но ни фига ни разу не понял, куда что совать, как это подключать и тыды.
huzik вне форума Ответить с цитированием
Старый 15.10.2009, 21:50   #4
capta1n
Форумчанин
 
Аватар для capta1n
 
Регистрация: 06.12.2008
Сообщений: 613
По умолчанию

применил стандартные контейнеры STL, функции для них, в частности функцию сравнения строк, поиска маски и т.д
:
Код:
#include <iostream>
#include <string> //библиотека, содержащая класс-контейнер string (STL)

using namespace std;

const string s1(".obaka"), s2("sob.ka"); //Две заданные строки
const char simbol='a'; //символ для замены масок на одном и том же месте (можно и не менять)
void main(){
	string str1(s1),str2(s2);
	int k=str1.find("."); //find() - метод класса string, ищет вхождение подстроки в строку и возвращает номер элемента
						  //в противном случае возвращает константу npos, определенную в классе string
	while (k!=string::npos){
		if (str2.at(k)!='.') str1.at(k)=str2.at(k); //замена символа строки str1 на символ строки str2, если str2[k]!='.';
													//метод at(number) аналогичен оператору [] за исключением того, что .at() может
													//контролировать выход за рамки строки
		else{
			str1.at(k)=simbol;
			str2.at(k)=simbol;
		}
		k=str1.find('.');
	}
	k=str2.find(".");
	while (k!=string::npos){
		if (str1.at(k)!='.') str2.at(k)=str1.at(k);
		else{
			str1.at(k)=simbol;
			str2.at(k)=simbol;
		}
		k=str2.find('.');
	}
	cout << str1.compare(str2) << endl; //Функция стравнения
										//Возвращает 0, если строки равны; 
										//отрицательное число, если строка меньше чем строка str2;
										//положительное число, если строка больше чем строка str2;
}
capta1n вне форума Ответить с цитированием
Старый 15.10.2009, 23:51   #5
huzik
Пользователь
 
Регистрация: 04.10.2009
Сообщений: 15
По умолчанию

О-па! Спасибо огромное!
huzik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Регулярные выражения ACE Valery PHP 5 14.10.2009 11:37
Регулярные выражения AnalogXP Общие вопросы Delphi 0 01.08.2009 23:12
Регулярные выражения 7KByte Общие вопросы C/C++ 1 01.06.2009 22:51
Регулярные выражения Adamant Общие вопросы C/C++ 1 26.11.2007 19:44