[c++] Szyfruj deszyfruj program
Ostatnio zmodyfikowano 2015-10-15 16:52
wojownik266 Temat założony przez niniejszego użytkownika |
[c++] Szyfruj deszyfruj program » 2015-09-27 13:15:49 Napisałem taki bardzo prosty program do szyfrowania i deszyfrowania ... Program do pewnego momentu działa znakomicie. Problemem jest natomiast to że nie chce rozszyfrowywać tekstu powyżej dwudziestu, trzydziestu znaków. Czy ktoś mógłby wskazać gdzie tkwi błąd? #include <iostream> #include <cstring> #include <fstream> using namespace std;
int main() { ofstream out( "zaszyfrowany.txt" ); string word; int i = 0; cout << "Szyfrowanie wedlug klucza:" << endl; cout << "--------------------------" << endl; for( char zn = 'a'; zn <= 'z'; ++zn ) { ++i; cout << " " << zn << " = [" << i << "]" << "\t"; } cout << endl; cout << "Podaj tekst do zaszyfrowania malymi literami:"; getline( cin, word ); for( unsigned int i = 0; i < word.length() + 1; ++i ) switch( word[ i ] ) { case 'a': out << 1 << " "; break; case 'b': out << 2 << " "; break; case 'c': out << 3 << " "; break; case 'd': out << 4 << " "; break; case 'e': out << 5 << " "; break; case 'f': out << 6 << " "; break; case 'g': out << 7 << " "; break; case 'h': out << 8 << " "; break; case 'i': out << 9 << " "; break; case 'j': out << 10 << " "; break; case 'k': out << 11 << " "; break; case 'l': out << 12 << " "; break; case 'm': out << 13 << " "; break; case 'n': out << 14 << " "; break; case 'o': out << 15 << " "; break; case 'p': out << 16 << " "; break; case 'q': out << 17 << " "; break; case 'r': out << 18 << " "; break; case 's': out << 19 << " "; break; case 't': out << 20 << " "; break; case 'u': out << 21 << " "; break; case 'v': out << 22 << " "; break; case 'w': out << 23 << " "; break; case 'x': out << 24 << " "; break; case 'y': out << 25 << " "; break; case 'z': out << 26 << " "; break; } out.close(); cout << "Koniec szyfrowania - plik zaszyfrowany i zapisany" << endl; cout << "--------------------------------------" << endl; ofstream ods( "odszyfrowany.txt" ); ifstream in( "zaszyfrowany.txt" ); int szyfr = 0; cout << "Odszyfrowywanie pliku" << endl; cout << "----------------------" << endl; while( in >> szyfr && !in.eof() ) { switch( szyfr ) { case 1: ods << "a" << " "; break; case 2: ods << "b" << " "; break; case 3: ods << "c" << " "; break; case 4: ods << "d" << " "; break; case 5: ods << "e" << " "; break; case 6: ods << "f" << " "; break; case 7: ods << "g" << " "; break; case 8: ods << "h" << " "; break; case 9: ods << "i" << " "; break; case 10: ods << "j" << " "; break; case 11: ods << "k" << " "; break; case 12: ods << "l" << " "; break; case 13: ods << "m" << " "; break; case 14: ods << "n" << " "; break; case 15: ods << "o" << " "; break; case 16: ods << "p" << " "; break; case 17: ods << "q" << " "; break; case 18: ods << "r" << " "; break; case 19: ods << "s" << " "; break; case 20: ods << "t" << " "; break; case 21: ods << "u" << " "; break; case 22: ods << "v" << " "; break; case 23: ods << "w" << " "; break; case 24: ods << "x" << " "; break; case 25: ods << "y" << " "; break; case 26: ods << "z" << " "; break; } } cout << "Koniec odszyfrowywania - plik odszyfrowany i zapisany " << endl; cout << "-------------------------------------------" << endl; ods.close(); in.close(); cin.get(); cin.get(); return 0; }
|
|
pekfos |
» 2015-09-27 13:32:41 for( unsigned int i = 0; i < word.length() + 1; ++i )
|
Dlaczego +1? while( in >> szyfr && !in.eof() )
|
Po co ten eof()? I dlaczego szyfrowanie i deszyfrowanie zajmuje 100 razy więcej kodu niż powinno? for( char zn = 'a'; zn <= 'z'; ++zn ) { ++i; cout << " " << zn << " = [" << i << "]" << "\t"; } |
Tu jakoś się domyśliłeś, że kolejne znaki chcesz zmienić na kolejne liczby. To liniowe przekształcenie, to się załatwia jedną operacją arytmetyczną, a nie instrukcją wyboru z ponad 20 wariantami. |
|
wojownik266 Temat założony przez niniejszego użytkownika |
» 2015-09-27 17:03:56 Usunicie in.eof() rozwiązało problem z szyfrowaniem i odszyfrowywaniem tekstu po wyżej trzydziestu znaków. za to należą ci się podziękowania a co do tego że ten program można napisać w paru linijkach to mógłbyś podać jakiś kawałek kodu? |
|
pekfos |
» 2015-09-27 17:21:52 Do tego filtruj sobie znaki funkcjami z <cctype>. |
|
C-Objective |
» 2015-10-15 16:52:34 #include <stdio.h> void xor( char * str, char key ) { for( i = 0; i < strlen( str ); i++ ) str[ i ] = str[ i ] ^ key; } main() { char * doszyfrowania = "Ala ma kota bo nie wzięła leków"; char key = 36; xor( doszyfrowania, key ); printf( doszyfrowania ); return 0; }
easy peasy lemon squeezy |
|
« 1 » |