![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 10.02.2012
Сообщений: 44
|
![]()
кто может помочь с этой программкой?)
http://programmersforum.ru/showthread.php?p=1035513#post103551 3 какова цена вопроса?) на просторах инета нашла "решениие".но оно действует только для примера: Вкратце, суть метода. Допустим, имеется n возможных подстановок. Применяем их по очереди и сверяем с эталоном. Если совпадение найдено, возвращаем true. Если ни одна из подстановок не подходит, возвращаем false. Иначе применяем подстановку и вызываемся рекурсивно для вновь сформированной строки. # include <string> # include <list> # include <iostream> using namespace std; //подстановка typedef pair<string,string> sub; /** * */ bool apply(string& from,const string& to, const list<sub >& subs_set, list< pair<const sub*,unsigned int> >& sub_ptrs) { //перебираем доступные подстановки for (list<pair<string,string> >::const_iterator i=subs_set.begin(); i != subs_set.end(); ++i) { unsigned int offset = from.find((*i).first); while (offset != -1) { //заменяем и проверяем from.replace(offset,(*i).second.len gth(),(*i).second); sub_ptrs.push_back(make_pair(&(*i), offset)); if (from == to || apply(from,to,subs_set,sub_ptrs)) { from.replace(offset,(*i).first.leng th(),(*i).first); return true; } //возвращаем все как было from.replace(offset,(*i).first.leng th(),(*i).first); sub_ptrs.pop_back(); offset = from.find((*i).first,offset+1); } } return false; } void main() { //множество подстановок list<pair<string,string> > subs_set; subs_set.push_back(make_pair<string ,string>("ba","ab")); subs_set.push_back(make_pair<string ,string>("cb","bc")); subs_set.push_back(make_pair<string ,string>("ca","ac")); //исходная строка //нужно получить string source = "cbba"; string to = "abbc"; //здесь будут храниться примененные подстановки list<pair<const sub*,unsigned int> > sub_ptrs; // if (apply(source,to,subs_set,sub_ptrs) ) { //выводим на экран for (list<pair<const sub*,unsigned int> >::const_iterator i = sub_ptrs.begin(); i != sub_ptrs.end(); ++i) { const sub* s = (*i).first; unsigned int offset = (*i).second; cout << offset << ' ' << s->first << "->" << s->second << ' '; cout << source << "->"; cout << source.replace(offset,s->first.length(),s->second) << endl; } } else cout << source << " x-> " << to << endl; } |
![]() |
![]() |
![]() |
#2 |
Новичок
Джуниор
Регистрация: 29.04.2009
Сообщений: 0
|
![]()
429684З44 icq
пишите |
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 05.03.2012
Сообщений: 29
|
![]()
Давно где-то видел вариант для n подстановок. Так что есть в инете такой вариант. Но там было без STL- на обычных массивах.
|
![]() |
![]() |
![]() |
#4 |
Пользователь
Регистрация: 10.02.2012
Сообщений: 44
|
![]()
перерыла инет-не нашла(
возможно,проглядела. если вдруг помните идею решения-подскажите,пожалуйста) |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
программка на С# | Kekc13 | Помощь студентам | 1 | 24.02.2012 19:07 |
Программка | VKorablev | Общие вопросы C/C++ | 2 | 20.12.2011 22:52 |
Программка | vadiprog | Помощь студентам | 2 | 03.10.2011 00:32 |
Программка | Ajempp | C++ Builder | 0 | 08.06.2011 18:35 |
Программка на си | Lussi_M | Помощь студентам | 2 | 22.11.2010 12:42 |