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

Либо удваивая одиночные, либо заменяя сдвоенные одним символом, привести строку к заданному виду - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ С чего лучше начать, и какие классы создать. Разработка приложения для управления удаленной консолью http://www.cyberforum.ru/cpp-beginners/thread1830586.html
Есть задание: Разработать Клиент-Серверное приложение, которое позволяет выполнять консольные команды на удаленном компьютере без использования стандартных средств удаленной коммункикации (Telnet). Особенности: 1)Приложение может выступать как сервером так и клиентом. 2)Должна присутствовать возможность шифрования канала связи. 3)Должен быть контроль доступа по имени пользователя и...
C++ Даны три целых числа. Вычесть из суммы всех чисел сумму четных чисел Даны три целых числа. Вычесть из суммы всех чисел сумму четных чисел. Помогите решить задачу, с объяснением(изучаю данный язык неделю, попрошу объяснить языком попроще=) http://www.cyberforum.ru/cpp-beginners/thread1830584.html
Вывести ответ с заданной точностью C++
Привет! Зачастил я тут ;( В общем, не могли бы помочь? Требуется сделать вывод ответа с точностью до 10^(-9), например: Output: 4.0 Output: 1.5
C++ Определение размера типа переданного в шаблон
Доброй день. Подскажите почему, sizeof в данном случае некорректно определяет размер структуры struct Preheader_1 { uint8_t packet_length; }; const Preheader_1* preheader_1 = (const Preheader_1*)Data; offset_by_preheader(Data, preheader_1);
C++ Поиск подстроки в строке http://www.cyberforum.ru/cpp-beginners/thread1830523.html
добрый день, товарищи возникло небольшое задание найти все слова, состоящие из одной буквы, в большом тексте я сделал сейчас вот что: заменил все знаки препинания в исходной стоке на пробелы, а после ищу совпадения, скажем, на строку " в ", используя при этом алгоритм кнута-морриса-пратта(по заданию ЛР именно его нужно использовать) скопировал из методички: int KMPSearch(char *string,...
C++ Удалить последние слова из строки Всем добрый день! Перечитал про множество функций для работы со строками. Нашел что то похожее для своей задачи puts(&str); где &str указывается с какого символа обрезать, но ..... она режет с начала строки, а мне нужно обрезать с конца строки. Спасибо за помощь:) подробнее

Показать сообщение отдельно
Mr.X
Эксперт С++
 Аватар для Mr.X
2807 / 1583 / 248
Регистрация: 03.05.2010
Сообщений: 3,688
21.10.2016, 14:05     Либо удваивая одиночные, либо заменяя сдвоенные одним символом, привести строку к заданному виду
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
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
///////////////////////////////////////////////////////////////////////////////
//1.
///////////////////////////////////////////////////////////////////////////////
//Даны три строки, состоящие из строчных латинских букв. С этими строками можно
//производить следующие операции: либо заменить один символ строки на два таких же символа
//(например, заменить символ «a» на «aa»), либо, наоборот, заменить два подряд идущих
//одинаковых символа на один такой же символ.
//Необходимо при помощи этих операций сделать все три строки равными какой-то другой
//общей строке S либо определить, что это сделать невозможно. При этом нужно минимизировать
//общее количество операций.
//Программа получает на вход три строки, состоящие из строчных букв латинского алфавита.
//Длина каждой строки не превышает 100 символов.
//Если при помощи указанных операций возможно сделать все три строки равными, выведите
//такую строку S, что суммарное число операций, необходимых для преобразования всех трёх
//данных строк к строке S, будет минимальным. Если этого сделать нельзя, программа должна
//вывести одно слово IMPOSSIBLE (заглавными буквами).
//Примеры:
//Ввод:
//aaaza
//aazzaa
//azzza
//Вывод:
//aazza
 
//Ввод:
//xy
//xxyy
//yx
//Вывод:
//IMPOSSIBLE
///////////////////////////////////////////////////////////////////////////////
#include <algorithm>
#include <cmath>
#include <iostream>
#include <iterator>
#include <set>
#include <string>
#include <vector>
///////////////////////////////////////////////////////////////////////////////
typedef std::string                     T_str;
typedef std::vector     < T_str     >   T_strings;
typedef std::multiset   < int       >   T_sizes;
///////////////////////////////////////////////////////////////////////////////
class   T_super_letter
{
    //-------------------------------------------------------------------------
    char        letter_;
    T_sizes     sizes_;
    //-------------------------------------------------------------------------
public:
    //-------------------------------------------------------------------------
    T_super_letter
        (
            char    letter,
            int     size
        )
        :
        letter_( letter )
    {
        sizes_.emplace( size );
    }
    //-------------------------------------------------------------------------
    bool    operator==  ( T_super_letter    const   &   R )                 const
    {
        return      letter_
                ==  R.letter_;
    }
    //-------------------------------------------------------------------------
    T_super_letter  &   operator+=  ( T_super_letter    const   &   R )
    {
        sizes_.insert   (
                            R.sizes_    .begin  (),
                            R.sizes_    .end    ()
                        );
 
        return  *this;
    }
    //-------------------------------------------------------------------------
    T_str   to_string()                                                     const
    {
        auto    it  =   sizes_.begin();
 
        std::advance    (
                            it,
                            sizes_.size() / 2
                        );
 
        return  T_str   (
                            *it,
                            letter_
                        );
    }
    //-------------------------------------------------------------------------
};
///////////////////////////////////////////////////////////////////////////////
typedef std::vector     < T_super_letter    >   T_super_letters;
///////////////////////////////////////////////////////////////////////////////
class   T_super_word
{
    //-------------------------------------------------------------------------
    bool                is_valid_;
    T_super_letters     super_letters_;
    //-------------------------------------------------------------------------
public:
    //-------------------------------------------------------------------------
    T_super_word    (
                        T_str   const   &   s     =   {}
                    )
        :
        is_valid_( true )
    {
        auto    it          =   s.begin();
        auto    it_next     =   s.begin();
 
        while   (
                        (
                            it_next     =   find_if
                                                (
                                                    it,
                                                    s.end(),
 
                                                    [=]  ( auto  elem )
                                                    {
                                                        return  elem    !=  *it;
                                                    }
                                                )
                        )
 
                    !=  it
                )
        {
            super_letters_.emplace_back     (
                                                T_super_letter  (
                                                                    *it,
                                                                    it_next - it
                                                                )
                                            );
 
            std::swap( it,  it_next );
        }//for
    }
    //-------------------------------------------------------------------------
    T_super_word    &   operator+=  ( T_super_word  const   &   R )
    {
        if  (
                super_letters_.empty()
            )
        {
            *this   =   R;
        }
        else
        {
            is_valid_   =       is_valid_
 
                            &&      super_letters_
                                ==  R.super_letters_;
 
            if( is_valid_ )
            {
                auto    it  =   super_letters_.begin();
 
                for( auto   const   &   sup_lett    :   R.super_letters_ )
                {
                    *it     +=  sup_lett;
                    ++it;
                }
            }//if
        }//else
 
        return  *this;
    }
    //-------------------------------------------------------------------------
    T_str   to_string()                                                     const
    {
        T_str   res;
 
        if( is_valid_ )
        {
            for( auto   const   &   sup_lett    :   super_letters_ )
            {
                res     +=  sup_lett.to_string();
            }
        }
        else
        {
            res     =   "IMPOSSIBLE";
        }
 
        return  res;
    }
    //-------------------------------------------------------------------------
};
///////////////////////////////////////////////////////////////////////////////
T_str   best_overall_line( T_strings    const   &   strings )
{
    T_super_word    res;
 
    for( auto   const   &   s   :   strings )
    {
        res     +=  T_super_word(s);
    }
 
    return  res.to_string();
}
///////////////////////////////////////////////////////////////////////////////
int     main()
{
    T_strings   strings(3);
 
    for( auto   &   s   :   strings )
    {
        std::cin    >>  s;
    }
 
    std::cout   <<  std::endl
                <<  best_overall_line( strings )
                <<  std::endl;
}
 
Текущее время: 13:06. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru