Program do szyfrowania

0

Witam, postanowiłem machnąć sobie program do szyfrowania liter w zdaniach. I teraz tak.

#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <string>
using namespace std;

void klucz1()
{
	cout << "Wpisz wyraz: ";
        int i;
		string napis;
        getline(cin,napis);
        cout << endl;

        for(i=0; i<napis.length(); i++)
        {
        	if(napis[i]=='a')
        	napis[i]='b';
        	else if(napis[i]=='b')
        	napis[i]='c';
        	else if(napis[i]=='c')
        	napis[i]='d';
        	else if(napis[i]=='d')
        	napis[i]='e';
        	else if(napis[i]=='e')
        	napis[i]='f';
        	else if(napis[i]=='f')
        	napis[i]='g';
        	else if(napis[i]=='g')
        	napis[i]='h';
        	else if(napis[i]=='h')
        	napis[i]='i';
        	else if(napis[i]=='i')
        	napis[i]='j';
        	else if(napis[i]=='j')
        	napis[i]='k';
        	else if(napis[i]=='k')
        	napis[i]='l';
        	else if(napis[i]=='l')
        	napis[i]='m';
        	else if(napis[i]=='m')
        	napis[i]='n';
        	else if(napis[i]=='n')
        	napis[i]='o';
        	else if(napis[i]=='o')
        	napis[i]='p';
        	else if(napis[i]=='p')
        	napis[i]='q';
        	else if(napis[i]=='q')
        	napis[i]='r';
        	else if(napis[i]=='r')
        	napis[i]='s';
        	else if(napis[i]=='s')
        	napis[i]='t';
        	else if(napis[i]=='t')
        	napis[i]='u';
        	else if(napis[i]=='u')
        	napis[i]='v';
        	else if(napis[i]=='v')
        	napis[i]='w';
        	else if(napis[i]=='w')
        	napis[i]='x';
        	else if(napis[i]=='x')
        	napis[i]='y';
        	else if(napis[i]=='y')
        	napis[i]='z';
        	else if(napis[i]=='z')
        	napis[i]='a';
        }

        for(i=0; i<napis.length(); i++)
        {
                 cout << napis[i];
        }
}

int main()
{
	char k;
	while (k != 'q')
	{
		int a;
		
		cout << "Przedstawiam program, ktory jest w stanie zaszyfrowac tekst na 25 sposobow.";

		cout << "\nWybierz sposob szyfrowania wpisujac liczby od 1 do 25: ";
		
		cin >> a;
		
		if(a==1){
		klucz1();
		}
		else
		cout << "Liczba spoza zakresu";

        cout << endl << endl;

		cout << "Nacisnij przycisk 'q' aby zakonczyc lub nacinij 'Enter', aby policzyc ponownie" << endl << endl;

		k = getch();

        system("cls");
	}
} 

Cały program ma około 1800 linijek (szyfruje na 25 sposobów), ale problem można wytłumaczyć na tym małym wycinku. Otóż, kiedy próbuję stworzyć konkretnie ten warunek...

cin >> a;
		
		if(a==1){
		klucz1();
		}
		else
		cout << "Liczba spoza zakresu";

...to, program zamiast wrzucić w miejsce klucz1(); całą funkcję, którą klucz1(); zawiera, kończy go , po czym mogę wcisnąć dowolny klawisz, aby zacząć od początku, bądź wyłączyć. Warunek jest tutaj konieczny, gdyż w jakiś sposób muszę wybrać metodę kodowania, więc jak go zrobić, żeby śmigał?

Sam sposób szyfrowania jest troszkę długi i łopatologiczny, ale koncepcja jest dobra, potrzeba mi tylko sposobu na ten warunek. Z góry dzięki za pomoc.

0

To na początek:

void klucz1()
{
        cout << "Wpisz wyraz: ";
        int i;
                string napis;
        getline(cin,napis);
        cout << endl;
 
        for(i=0; i<napis.length(); i++)
        {
               if( napis[i] >= 'a' && napis[i] < 'z' ) ++napis[i];
               else if( napis[i] == 'z' ) napis[i] = 'a';

               cout<<napis[i];
        }
}

Polecam też sprawdzić co robi metoda ignore() z bodajże iostream ;)

0

Jo, wcześniej miałem wsadzone do pętli coś takiego.

{
napis[i] = toupper(napis[i]);
if((napis[i] >= 'a') && (napis[i] <= 'z')) napis[i] = char(65 + (napis[i] - 62) % 26);
}

No ale miało być łopatologicznie, to jest.

0
void klucz1()
  {
   cout<<"Wpisz wyraz: ";
   char ch;
   while((ch=cin.get())!='\n') cout<<((('a'<=ch)&&(ch<='z'))?(char)((ch-'a'+1)%26+'a'):ch);
   cout<<ch;
  }

1 użytkowników online, w tym zalogowanych: 0, gości: 1