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

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

Вернуться   Форум программистов > Работа для программиста > Фриланс
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.05.2012, 17:52   #1
iris_ka
Пользователь
 
Регистрация: 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;
}
iris_ka вне форума Ответить с цитированием
Старый 11.05.2012, 18:12   #2
RefRinGerator
Новичок
Джуниор
 
Регистрация: 29.04.2009
Сообщений: 0
По умолчанию

429684З44 icq
пишите
RefRinGerator вне форума Ответить с цитированием
Старый 11.05.2012, 21:08   #3
mr_cipher
Пользователь
 
Регистрация: 05.03.2012
Сообщений: 29
По умолчанию

Давно где-то видел вариант для n подстановок. Так что есть в инете такой вариант. Но там было без STL- на обычных массивах.
mr_cipher вне форума Ответить с цитированием
Старый 12.05.2012, 13:05   #4
iris_ka
Пользователь
 
Регистрация: 10.02.2012
Сообщений: 44
По умолчанию

перерыла инет-не нашла(
возможно,проглядела.
если вдруг помните идею решения-подскажите,пожалуйста)
iris_ka вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
программка на С# 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