#include <stdlib.h> // Для функции exit() #include <fstream> // Для файловых потоков #include <iostream> #include "ConsolCyr.h" #include <string> using namespace std; const int lenName = 13; // max длина имени файла const int lenString = 60; // Длина вспомогательного массива int sumS(char *chr); //подсчет суммы кодов void main() { char source[lenName]; // Массив для имени файла cout << "\nВведите имя кодового файла: "; cin >> source; ifstream inFile; // Входной файловый поток // Открыть файл source и связать его с потоком inFile: inFile.open(source); if (!inFile) // Проверить правильность открытия файла { cerr << "\nОшибка при открытии файла " << source; exit(1); // Завершение программы } // Вспомогательный массив для чтения: char string[lenString]; char next; cin.get(); // Убирает код из потока cin int *ptr, j=0, max=1000; ptr=new int[max]; while(1) // Неограниченный цикл { if (j==max) //расширяем массив ключей, если не хватает места { int *ptr1; ptr1=new int[max]; for(int i=0;i<max;i++) {ptr1[i]=ptr[i];} delete[] ptr; ptr=new int[max+1000]; for(int i=0;i<max;i++) {ptr[i]=ptr1[i];} delete[] ptr1; max+=1000; } for(int i=0; i<lenString; i++) // на всякий случай запонляем string пробелами, //что бы было проще распознaвать конец слова. {string[i]=' ';} inFile >> string; //получаем слово ptr[j]=sumS(string); //сумма кодов символов next = inFile.peek(); j++; if (next == EOF) break; } inFile.close(); ofstream onFile1("End_file.txt", ios::trunc | ios::binary); //открываем и усекаем фаил для конечного результата. cout << "\nВведите имя кодируемого файла: "; cin >> source; ifstream inFile2(source, ios::binary); //поток на запись int k=0; char chr[1], ch; //вдруг пригодится cout << "Идет шифрование..." << endl; cout << "Какой символ исследуем?" << endl; cin.setf (ios::binary); cin >> ch; cin.unsetf(ios::binary); cout << ch << endl; int charray[256]; for (int i=0;i<256;i++) { charray[i]=-200; } while(!inFile2.eof()) //шифрование { if (k==j) k=0; // если ключей не хватает - начать с начала inFile2.read(chr, 1); cout << chr[0]<< endl; if (ch==chr[0]) //сравнение не работает, т.к. один бинарный а другой нет. Хз че делать пока charray[ch]=1; if (inFile2.eof()) break; //cout << "преобразую символ " << chr[0]; chr[0]=(ptr[k]^chr[0]); //cout << " Код равен " << ptr[k] << " получился символ " << chr[0] << endl; onFile1.write(chr, 1); k++; } j=0; for (int i=0; i<256; i++) { if (charray[i]==1) { cout << char(i); j++; } } cout << "Всего разных кодов символа " <<j<< endl; system("pause"); } int sumS(char *chr) //подсчет суммы кодов { char result=0; int i=0; while (chr[i]!=' ') { result+=chr[i]; i++; } return result; }