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

Шифровка текста двунаправленным списком - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Возможно ли определить тип сборки http://www.cyberforum.ru/cpp-beginners/thread894204.html
Доброго дня. Подскажите, есть ли возможность решения данной проблемы. Для удобства, часто использующиеся в разных проектах классы, я загнал в различные статические библиотеки, и для использования я...
C++ Рекурсивные функции (палиндром) Необходимо составить программу, которая содержит рекурсивную функ-цию Palindrom(S) логического типа, возвращающую True, если строка S является палиндромом (то есть читается одинаково слева направо и... http://www.cyberforum.ru/cpp-beginners/thread894202.html
C++ Определить радиус и центр окружности минимального радиуса, проходящей хотя бы через три различные точки заданного множества точек на плоскости
Определить радиус и центр окружности минимального радиуса, проходящей хотя бы через три различные точки заданного множества точек на плоскости.
C++ Замените в тексте входного файла все группы подряд идущих пробелов на один пробел
Замените в тексте входного файла все группы подряд идущих пробелов на один пробел. Результат запишите в выходной файл
C++ [Сортировка слиянием] Уменьшить количество требуемой памяти для сортировки http://www.cyberforum.ru/cpp-beginners/thread894190.html
Добрый, на момент написания, день всем. Изучаю алгоритмы данных, дошёл до сортировки слиянием (Merge Sort). Прочитал, что для сортировки как минимум требуется выделение памяти, эквивалентное...
C++ long double и double в MSVC 12 одно и тоже, нужна информация,желательно быстрей Здравствуйте все знают что в VC long double и double одно и тоже, да и при простой проверке это легко выясняется, но нужна информация от самого майкрософта, цитата или ещё что нито, где сказано что в... подробнее

Показать сообщение отдельно
ШурикМартыненко
4 / 4 / 1
Регистрация: 27.03.2013
Сообщений: 110

Шифровка текста двунаправленным списком - C++

07.06.2013, 10:00. Просмотров 469. Ответов 7
Метки (Все метки)

Надо написать программу для шифровки и расшифровки текстового файла, используя двунаправленный список. Зашифровать получается, а вот расшифровать... Подскажите, что у меня не так? Вот код :


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
219
220
221
222
223
224
225
226
227
228
229
230
#include "stdafx.h"
#include <fstream>
#include <iostream>
using namespace std;
 
// Элемент списка (двунаправленного)
 
class TItem {
     public:
            TItem();
            char letter;         // Символ
            int code;            // Шифр этого символа
            TItem* next;
            TItem* prev;
};
// - - - - - - - - - - - -
 class TItem2 {
     public:
            TItem2();
            int letter;         // Шифр символа
            char code;            // Этот символа
            TItem* next;
            TItem* prev;
};
 
// Собственно список
 
class TList {
    private:
        TItem* first;
        TItem* last;
    public:
        TList();
        void AddItem(char letter, int code);
       void Print();                    // Печать списка
        int GetCode(char letter);
};
// - - - - - - - - - - - -
class TList2 {
    private:
        TItem* first;
        TItem* last;
    public:
        TList2();
        void AddItem(int letter, char code);
           void Print();                    // Печать списка
        int GetCode(int letter);
}; 
 
 
 
int main() {
    setlocale(LC_ALL, "Russian");
 int choice;
 cout<<"Вы желаете:\n1. Зашифровать данные\n2. Расшифровать данные\n";
 cin>>choice;
 if (choice==1)
 {
// Создаём список -- добавляем символы и их шифры
    TList cypher;
 
    int i=1, j;
    for(j='A'; j<='Z'; j++, i++) 
        cypher.AddItem( (char)j, i );
    for(j='a'; j<='z'; j++, i++)
        cypher.AddItem( (char)j, i );
    for(j='0'; j<='9'; j++, i++)
        cypher.AddItem( (char)j, i );
 
// В том случае, если исходный файл, кот. требуется зашифровать, не существует, создаём файл для теста.
    {
        ifstream iftemp("source.txt");
        if(!iftemp) {
            ofstream oftemp("source.txt");
            oftemp << "Test Encrypting!\nRedhat goes to granny.";
            oftemp.close();
        }
        else
            iftemp.close();
    }
 
// Подключаем исходный и результирующий файлы.
        ifstream fin("source.txt");
    ofstream fout("encrypted.txt");
    char temp;
 
// Для шифр каждого символа в списке-шифре и записываем найденный шифр в результирующий файл
    while( fin ) {
        temp = (char)fin.get();          // Прочитали следующий символ из файла
        if(temp == EOF)  break;          // Если этот символ -- EOF, заканчиваем цикл
        if( !cypher.GetCode(temp) )
            fout << temp;            // Нашли шифр -- записали в файл-результат
        else
            fout << cypher.GetCode(temp) << '.';      // Не нашли шифр -- записали в файл-результат исходный символ
    }
 }
 else if (choice==2)
 {
     // Создаём список -- добавляем символы и их шифры
    TList2 cypher;
 
    int i=1, j;
    for(j='A'; j<='Z'; j++, i++) 
        cypher.AddItem( j, (char)i );
    for(j='a'; j<='z'; j++, i++)
        cypher.AddItem( j, (char)i );
    for(j='0'; j<='9'; j++, i++)
        cypher.AddItem( j, (char)i );
 
// В том случае, если исходный файл, кот. требуется зашифровать, не существует, создаём файл для теста.
    {
        ifstream iftemp("source.txt");
        if(!iftemp) {
            ofstream oftemp("source.txt");
            oftemp << "1.2.3.";
            oftemp.close();
        }
        else
            iftemp.close();
    }
 
// Подключаем исходный и результирующий файлы.
        ifstream fin("source.txt");
    ofstream fout("encrypted.txt");
    int temp;
 
// Для шифр каждого символа в списке-шифре и записываем найденный шифр в результирующий файл
    while( fin ) {
        temp = (int)fin.get();          // Прочитали следующий символ из файла
        if(temp == EOF)  break;          // Если этот символ -- EOF, заканчиваем цикл
        if( !cypher.GetCode(temp) )
            fout << temp;            // Нашли шифр -- записали в файл-результат
        else
            fout << cypher.GetCode(temp) << '.';      // Не нашли шифр -- записали в файл-результат исходный символ
    }
 }
return 0;
}
 
// - - - - - - - - - - - -
 
 
 
 
// Конструкторы и методы
 
TItem::TItem() {
    letter = '\0';
    code = 0;
    next = NULL;
    prev = NULL;
}
TItem2::TItem2() {
    letter = 0;
    code = '\0';
    next = NULL;
    prev = NULL;
}
 
TList::TList() {
    first = NULL;
    last = NULL;
}
TList2::TList2() {
    first = NULL;
    last = NULL;
}
 
 
// Метод. Добавляет новый элемент в список
 
void TList::AddItem(char letter, int code) {
    TItem* temp;
    temp = new TItem();
    temp->code = code;
    temp->letter = letter;
    if(!first) {
        first = temp;
    } else {
        last->next = temp;
        temp->prev = last;
    }
    last = temp;
}
 void TList2::AddItem(int letter, char code) {
    TItem* temp;
    temp = new TItem();
    temp->code = code;
    temp->letter = letter;
    if(!first) {
        first = temp;
    } else {
        last->next = temp;
        temp->prev = last;
    }
    last = temp;
}
 
 
 
void TList::Print() {
    TItem* temp;
    temp = first;
    while(temp) {
        cout << temp->letter << " -> " << temp->code << endl;
        temp = temp->next;
    }
} 
 
 
// Метод. Поиск элемента списка по его содержимому.
 
int TList::GetCode(char letter) {
    TItem* temp;
    temp = first;
    while(temp) {
        if(temp->letter == letter) return temp->code;
        temp = temp->next;
    }
    return 0;
}
int TList2::GetCode(int letter) {
    TItem* temp;
    temp = first;
    while(temp) {
        if(temp->letter == letter) return temp->code;
        temp = temp->next;
    }
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru