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

Шифрование текста, табличная замена текста - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Работа с конструктором http://www.cyberforum.ru/cpp-beginners/thread1759995.html
Доброго времени суток. Обращаюсь к вам с двумя проблемами. Во-первых, Code Blocks выдаёт у меня ошибку multiple definition. Связано ли это с тем, что я привязываю заголовочный файл bankomat.h #ifndef BANKOMAT_H_INCLUDED #define BANKOMAT_H_INCLUDED #include <iostream> #include <cstdlib> #include <locale.h> сразу к двум файлам?
C++ Запутался с индексами Привет, немного запутался в своем же коде (который работает на ура). Создал функцию, которая разделяет текст на слова и возвращает вектор этих слов. Она берет в аргументы сам тект, делиметры (которыми разделяются слова) и максимальный размер слова, которое может быть записано в вектор. Вот она: std::vector<std::string> tokenize(const std::string & text, const std::string & delim, int... http://www.cyberforum.ru/cpp-beginners/thread1759978.html
Функция replace(). Дайте рекомендации, пожалуйста C++
Добрый вечер! Написал не сложную функцию replace, но чувствую, что с утечками памяти тут не всё хорошо. Не могли бы дать рекомендации, как функцию можно было бы улучшить в этом плане. #include <iostream> #include <stdio.h> #include <tchar.h> #include <locale.h>
C++ Проверить на одинаковость классов
Здравствуйте, столкнулся с такой задачей. У меня есть один абстрактный класс, 3 унаследованных. Применяя полиморфизм,в main() я вызываю функцию,которая передаёт один параметр, унаследованного типа. В реализации этой функции,мне необходимо знать,какой тип я принял. Можно ли это проверить через dynamic_cast или typeid?
C++ Компьютерная диагностика радио аппаратуры http://www.cyberforum.ru/cpp-beginners/thread1759954.html
Программа на компютер для ремонта видео и аудио аппаратуры.Программа работает как тестер,только горит цветами(красный-не рабочая,зелёный-рабочая).Вверху программы есть строка,где нужно писать марку той аппаратуры,которую будеш проверять.Программа сама должна знать все параметры радиодеталей для этой марки и выводить информацию на табло цветом.Табло находится под строкой.Дальше берём обыкновенные...
C++ Сортировка строк по алфавиту в VS Одно из подзаданий- отсортировать информацию за алфавитом смотря на Имя. Не совсем понимаю, как это сделать со строками #include <iostream> #include <conio.h> #include <stdlib.h> #include <string> #include <fstream> #include<stdlib.h> подробнее

Показать сообщение отдельно
Mr.X
Эксперт С++
 Аватар для Mr.X
2798 / 1574 / 246
Регистрация: 03.05.2010
Сообщений: 3,651
11.06.2016, 09:57     Шифрование текста, табличная замена текста
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
//Один из простейших способов шифровки текста состоит в табличной замене
//каждого символа другим символом - его шифром. Выбрать некоторую таблицу,
//разработать способ ее представления, затем
//а) зашифровать данный текст;
//б) расшифровать данный текст
///////////////////////////////////////////////////////////////////////////////
#include <algorithm>
#include <cctype>
#include <climits>
#include <cstdlib>
#include <ctime>
#include <exception>
#include <iostream>
#include <limits>
#include <map>
#include <set>
#include <stdexcept>
#include <string>
#include <vector>
///////////////////////////////////////////////////////////////////////////////
typedef std::map        < char,     char    >   T_key;
typedef std::string                             T_text;
typedef std::set        < char  >               T_char_set;
typedef std::vector     < char  >               T_symbols;
///////////////////////////////////////////////////////////////////////////////
char    get_rand_symb()
{
    return  rand() % ( CHAR_MAX - CHAR_MIN + 1 ) + CHAR_MIN;
}
///////////////////////////////////////////////////////////////////////////////
void    make_rand_key
    (
        T_key   &   key,
        T_key   &   reverse_key
    )
{
    const   char    FIRST_ALPHABET_LETTER   =   'a';
    const   char    LAST_ALPHABET_LETTER    =   'z';
 
    const   size_t  ALPHABET_SIZE           =       LAST_ALPHABET_LETTER
                                                -   FIRST_ALPHABET_LETTER
                                                +   1;
 
    T_char_set      symbols_set;
 
    while   (
                    symbols_set.size()
                <   ALPHABET_SIZE
            )
    {
        char    rand_alnum_symb{};
 
        do
        {
            rand_alnum_symb     =   get_rand_symb();
        }
        while   (
                    !isalnum( rand_alnum_symb )
                );
 
        symbols_set.insert( rand_alnum_symb );
    }//while
 
    T_symbols   symbols (
                            symbols_set.begin   (),
                            symbols_set.end     ()
                        );
 
    std::random_shuffle
        (
            symbols.begin   (),
            symbols.end     ()
        );
 
    for (
            char
            symb{ FIRST_ALPHABET_LETTER };
            symb    <=  LAST_ALPHABET_LETTER;
            ++symb
        )
    {
        key[ symb ]     =   symbols[ symb   -   FIRST_ALPHABET_LETTER ];
 
        reverse_key
            [
                key[ symb ]
            ]
            =   symb;
    }//for
}
///////////////////////////////////////////////////////////////////////////////
void    input_text( T_text  &   text )
{
    std::cout   <<  "\n\nEnter text in lower-case Latin letters:\n-> ";
    std::cin    >>  text;
}
///////////////////////////////////////////////////////////////////////////////
void    encrypt_text
    (
        T_text  const   &   text,
        T_key   const   &   key,
        T_text          &   encrypted_text
    )
{
    for( auto   symb    :   text )
    {
        auto    it  =   key.find( symb );
 
        if  (
                it  ==  key.end()
            )
        {
            throw   std::domain_error("Invalid symbol in text.");
        }
 
        encrypted_text.push_back( it->second );
    }//for
}
///////////////////////////////////////////////////////////////////////////////
void    print_text_with_comment
    (
        T_text  const   &   text,
        T_text  const   &   comment
    )
{
    std::cout   <<  std::endl
                <<  comment
                <<  std::endl
                <<  text
                <<  std::endl;
}
///////////////////////////////////////////////////////////////////////////////
int     main()
{
    std::ios::sync_with_stdio(false);
    srand(unsigned(time(0)));
 
    T_key   key;
    T_key   reverse_key;
 
    make_rand_key
        (
            key,
            reverse_key
        );
 
    for(;;)
    {
        T_text   text;
        input_text( text );
        T_text   encrypted_text;
 
        try
        {
            encrypt_text
                (
                    text,
                    key,
                    encrypted_text
                );
        }
        catch   (
                    std::exception  &   e
                )
        {
            std::cout   <<  e.what()
                        <<  std::endl;
 
            continue;
        }//catch
 
        print_text_with_comment
            (
                encrypted_text,
                "Encrypted text:"
            );
 
        T_text   decrypted_text;
 
        encrypt_text
            (
                encrypted_text,
                reverse_key,
                decrypted_text
            );
 
        print_text_with_comment
            (
                decrypted_text,
                "Decrypted text:"
            );
    }//for
}
 
Текущее время: 19:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru