Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Szyfr Cezara

Ostatnio zmodyfikowano 2016-04-21 22:10
Autor Wiadomość
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".
C/C++
#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;
}
P-147500
SeaMonster131
» 2016-04-21 18:11:58
Kod wstawiamy na forum w [cpp] .. [/cpp].
Możesz zastosować np. konstrukcję if {} else if {} else {}.
P-147503
mateczek
» 2016-04-21 20:31:20
C/C++
for( int i = 0; i < dlugosc; i++ )
{
    if( tekst[ i ] == 'z' ) tekst[ i ] = 'a'; // to ci zmienia 'z' na 'a'
   
    if( tekst[ i ] == ' ' ) tekst[ i ] = ' ';
   
    if(( tekst[ i ] >= 'a' ) &&( tekst[ i ] < 'z' ) ) tekst[ i ] = tekst[ i ] + 1; // a to jeszcze raz z 'a' na 'b'
   
}
P-147506
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
C/C++
if(( tekst[ i ] >= 'a' ) &&( tekst[ i ] < 'z' ) ) tekst[ i ] = tekst[ i ] + 1;


tylko jeśli zmienię na to:
C/C++
if(( tekst[ i ] > 'a' )

to pokaże mi 'a' ale już mi nie zwiększy o 1
P-147519
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
C/C++
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;
       
    }
P-147523
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
C/C++
for( int i = 0; i < dlugosc; i++ )
{
    if( tekst[ i ] == 'z' ) tekst[ i ] = 'a';
    // else if( tekst[ i ] == ' ' ) tekst[ i ] = ' ';   // bez sensu warunek bo nic nie zmieniasz :P
    else if(( tekst[ i ] >= 'a' ) &&( tekst[ i ] < 'z' ) ) tekst[ i ] = tekst[ i ] + 1;
   
}

// drugi sposób

for( int i = 0; i < dlugosc; i++ )
{
    if( tekst[ i ] == 'z' ) {
        tekst[ i ] = 'a';
        continue; //znalazł kończy pętle
    }
   
   
    if(( tekst[ i ] >= 'a' ) &&( tekst[ i ] < 'z' ) ) tekst[ i ] = tekst[ i ] + 1;
   
}

przykładowy poprawiony kod

C/C++
#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;
    }
}
P-147524
« 1 »
  Strona 1 z 1