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

По строкам s2 и s3 восстановить строку s1 - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Как расширить длину строки до определённого значения? http://www.cyberforum.ru/cpp-beginners/thread1215249.html
Подскажите,как расширить длину строки до определённого значения.
C++ Давайте создадим библиотеку с литературой для начинающих Здравствуйте уважаемые админы сайта:) С недавних пор начал изучение языка программирования С++ и естественно встал самый первый и самый важный вопрос -"Где бы надыбать материал для чайников,... http://www.cyberforum.ru/cpp-beginners/thread1215218.html
Определить слова, в которых больше гласных букв, чем согласных C++
В программировании пока не силен. Не могу решить 3 интересных задачки. Нужна помощь. 1) В предложении, вводимом пользователем с клавиатуры, определить слова, в которых больше гласных букв, чем...
C++ Создайте программу, выводящую сумму элементов последовательности 2, 4, 6, 8,… 98, 100
Приветствую друзья! Вообщем мне нужно создать программку выводящую сумму элементов последовательности 2, 4, 6, 8,… 98, 100 int sum = 0; for (int j = 2; j <= 100; j=j+2) { sum = sum + j; }...
C++ Почему вывод аргументов не осуществляется для классового шаблона? http://www.cyberforum.ru/cpp-beginners/thread1215173.html
Заметьте,что параметры классовых шаблонов никогда не выводятся.Причина заключается в том,что гибкость,порождаемая наличием нескольких конструкторов класса,в ряде случаев делает вывод параметров...
C++ Вернуть указатель на массив указателей Всем привет! Написал маленький код: int WHAT(); int main() { cout<<WHAT(); подробнее

Показать сообщение отдельно
Mr.X
Эксперт С++
3050 / 1695 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
24.06.2014, 23:02
Если возможны варианты ответа, то программа находит их все:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
/////////////////////////////////////////////////////////////////////////////////////////
//Заданная строка s1. После удаления одной буквы с s1 образуется строку s2. После удаления 
//из s1 другой буквы образуется строка s3. по строкам s2 и s3 восстановить строку s1.
/////////////////////////////////////////////////////////////////////////////////////////
#include <algorithm>
#include <iostream>
#include <iterator>
#include <set>
#include <string>
/////////////////////////////////////////////////////////////////////////////////////////
typedef std::string         T_str;
typedef std::set< T_str >   T_strings;
/////////////////////////////////////////////////////////////////////////////////////////
T_strings  get_restored_strings
    (
        T_str   const   &   AA,
        T_str   const   &   BB
    )
{
    T_strings   res_strings;
 
    if  (
            AA.size() == BB.size()
        )
    {
        for( size_t   max_pref_size = 0; max_pref_size < AA.size(); ++max_pref_size )
        {
            T_str   A   =   AA;
            T_str   B   =   BB;
 
            T_str   pref;
 
            while   (
                            A.size()    >   1
                        &&  A.front()   ==  B.front()
                        &&  pref.size() <   max_pref_size
                    )
            {
                pref    +=  A.front();
                A.erase( 0, 1 );
                B.erase( 0, 1 );
            }
 
            T_str   suff;
 
            while   (
                            A.size()    >   1
                        &&  A.back()    ==  B.back()
                    )
            {
                suff    +=  A.back();
                A.pop_back();
                B.pop_back();
            }
            std::reverse
                (
                    suff.begin  (),
                    suff.end    ()
                );
 
            for( int  i = 0; i < 2; ++i )
            {
                if  (
                            B.front()    +   A
                        ==  B            +   A.back()
                    )
                {
                    res_strings.insert
                        (
                                pref
                            +   B.front()    +   A
                            +   suff
                        );
                }//if
 
                std::swap( A, B );
            }//for
        }//for
    }//if
 
    return  res_strings;
}
/////////////////////////////////////////////////////////////////////////////////////////
void  print_strings( T_strings  const   &   strings )
{
    if( strings.empty() )
    {
        std::cout   <<  "Нет ответа.";
    }
 
    std::copy
        (
            strings.begin   (),
            strings.end     (),
            std::ostream_iterator<T_str>( std::cout, "\n" )
        );
}
/////////////////////////////////////////////////////////////////////////////////////////
int  main()
{
    std::locale::global(std::locale(""));
 
    for(;;)
    {
        T_str   A;
        std::cout   <<  "\n\n\n\n\nподстрока 1: ";
        std::cin    >>  A;
 
        T_str   B;
        std::cout   <<  "подстрока 2: ";
        std::cin    >>  B;
 
        T_strings   strings     =   get_restored_strings( A, B );
 
        print_strings( strings );
    }//for
}
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru