Szyfr Cezara
Ostatnio zmodyfikowano 2016-04-21 22:10
lombardo Temat założony przez niniejszego użytkownika |
Szyfr Cezara » 2016-04-21 17:12:01 Napisałem program, który po wpisaniu tekstu wyświetla wszystkie możliwe kombinacje tj. od przesunięcia o 1 aż do przesunięcia o 25 pozycji. Wszystko działa poprawnie, lecz jedynym problemem jest to, że gdy litera ma przejść z "z" na "a" to przechodzi od razu na "b". #include <iostream> #include <string> #include <conio.h>
using namespace std;
int main() { string tekst; int dlugosc; cout << "Wpisz tekst: \n"; getline( cin, tekst ); dlugosc =( int ) tekst.length(); for( int a = 1; a < 60; a++ ) { for( int i = 0; i < dlugosc; i++ ) { if( tekst[ i ] == 'z' ) tekst[ i ] = 'a'; if( tekst[ i ] == ' ' ) tekst[ i ] = ' '; if(( tekst[ i ] >= 'a' ) &&( tekst[ i ] < 'z' ) ) tekst[ i ] = tekst[ i ] + 1; } cout << "o " << a << " " << tekst << endl; } getch(); return 0; }
|
|
SeaMonster131 |
» 2016-04-21 18:11:58 Kod wstawiamy na forum w [cpp] .. [/cpp]. Możesz zastosować np. konstrukcję if {} else if {} else {}. |
|
mateczek |
» 2016-04-21 20:31:20 for( int i = 0; i < dlugosc; i++ ) { if( tekst[ i ] == 'z' ) tekst[ i ] = 'a'; if( tekst[ i ] == ' ' ) tekst[ i ] = ' '; if(( tekst[ i ] >= 'a' ) &&( tekst[ i ] < 'z' ) ) tekst[ i ] = tekst[ i ] + 1; } |
|
lombardo Temat założony przez niniejszego użytkownika |
» 2016-04-21 21:44:08 A to to wiem, że 'a' przechodzi na 'b' w tej linijce if(( tekst[ i ] >= 'a' ) &&( tekst[ i ] < 'z' ) ) tekst[ i ] = tekst[ i ] + 1;
tylko jeśli zmienię na to: to pokaże mi 'a' ale już mi nie zwiększy o 1 |
|
lombardo Temat założony przez niniejszego użytkownika |
» 2016-04-21 21:50:23 Dobra, już wiem jak to zrobić. Po prostu zamiast 'a' wklepałem '`' czyli znak przed 'a' w kodzie ASCII for( int a = 1; a < 60; a++ ) { for( int i = 0; i < dlugosc; i++ ) { if( tekst[ i ] == 'z' ) tekst[ i ] = '`'; if( tekst[ i ] == ' ' ) tekst[ i ] = ' '; if(( tekst[ i ] >= '`' ) &&( tekst[ i ] < 'z' ) ) tekst[ i ] = tekst[ i ] + 1; }
|
|
mateczek |
» 2016-04-21 22:10:22 Dobra, już wiem jak to zrobić. Po prostu zamiast 'a' wklepałem '`' czyli znak przed 'a' w kodzie ASCII
|
pierwszą podpowiedz dostałeś os SeaMonster for( int i = 0; i < dlugosc; i++ ) { if( tekst[ i ] == 'z' ) tekst[ i ] = 'a'; else if(( tekst[ i ] >= 'a' ) &&( tekst[ i ] < 'z' ) ) tekst[ i ] = tekst[ i ] + 1; }
for( int i = 0; i < dlugosc; i++ ) { if( tekst[ i ] == 'z' ) { tekst[ i ] = 'a'; continue; } if(( tekst[ i ] >= 'a' ) &&( tekst[ i ] < 'z' ) ) tekst[ i ] = tekst[ i ] + 1; }
przykładowy poprawiony kod #include <iostream> #include <string>
using namespace std;
int main() { string tekst; int dlugosc; cout << "Wpisz tekst: \n"; getline( cin, tekst ); dlugosc =( int ) tekst.length(); for( int a = 1; a < 60; a++ ) { for( int i = 0; i < dlugosc; i++ ) { if( tekst[ i ] == 'z' ) { tekst[ i ] = 'a'; } else if(( tekst[ i ] >= 'a' ) &&( tekst[ i ] < 'z' ) ) { tekst[ i ] = tekst[ i ] + 1; } } cout << "o " << a << " " << tekst << endl; } }
|
|
« 1 » |