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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Возможно ли определить тип сборки http://www.cyberforum.ru/cpp-beginners/thread894204.html
Доброго дня. Подскажите, есть ли возможность решения данной проблемы. Для удобства, часто использующиеся в разных проектах классы, я загнал в различные статические библиотеки, и для использования я просто подключаю заголовочный файл с объявлением интерфейса класса, в котором содержится директива: #pragma comment(lib,"mylib.lib") путь к которой прописан в настройках среды (MSVS 2010). Но...
C++ Рекурсивные функции (палиндром) Необходимо составить программу, которая содержит рекурсивную функ-цию Palindrom(S) логического типа, возвращающую True, если строка S является палиндромом (то есть читается одинаково слева направо и справа налево), и False в противном случае. Оператор цикла в теле функции не использовать. Вывести значения функции Palindrom(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
07.06.2013, 10:00     Шифровка текста двунаправленным списком
Надо написать программу для шифровки и расшифровки текстового файла, используя двунаправленный список. Зашифровать получается, а вот расшифровать... Подскажите, что у меня не так? Вот код :


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;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 14:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru