Witam. Wiem, że zadanie z Szyfrem Cezara było wałkowane tysiąc razy, lecz proszę o pomoc.
Zadanie - standardowo - ma na celu zaszyfrowania i odszyfrowania tekstu. Oto jego treść:
W tym zadaniu Twój program powinien realizować algorytm szyfrowania i odszyfrowywania danych, który był już używany w czasach Juliusza Cezara. Szyfrowanie tekstu polega na szyfrowaniu kolejnych jego liter (pozostałe znaki pozostawiamy bez zmian). Każda litera zostaje zamieniona w k-tą następną w alfabecie (k jest stałą szyfru), przy czym jeżeli taka nie istnieje (wychodzimy za z), to odliczanie jest kontynuowane z powrotem od a. Szyfrowanie zachowuje wielkość liter (tj. małe przechodzą na małe, a wielkie na wielkie). Zakładamy, że w tekście występują jedynie litery alfabetu angielskiego (małe i wielkie).
Dla przykładu, jeżeli k=5, to małe litery tekstu przechodzą na małe litery szyfru według poniższej tabelki:
litera a b c d e f g h i j k l m n o p q r s t u v w x y z
szyfr f g h i j k l m n o p q r s t u v w x y z a b c d e
Wielkie litery tekstu przechodzą na wielkie litery szyfru zgodnie z tą samą regułą.Napisz program, który wczyta tekst do zaszyfrowania lub odszyfrowania i stałą k i zaszyfruje lub odszyfruje ten tekst, w zależności od polecenia.
Wejście
Pierwszy wiersz wejścia zawiera jedną liczbę 1 lub 2. Liczba 1 oznacza "szyfruj", a liczba 2 - "odszyfruj". Drugi wiersz wejścia zawiera stałą k. Trzeci i ostatni wiersz wejścia zawiera tekst, złożony wyłącznie z liter (małych bądź dużych) i/lub znaków interpunkcyjnych (bez odstępów). Tekst będzie zawierał co najmniej jeden znak i co najwyżej 1000 znaków.Wyjście
Pierwszy i jedyny wiersz wyjścia powinien zawierać tekst po zaszyfrowaniu bądź odszyfrowaniu.
Oto mój kod:
#include <iostream>
#include <cstdlib>
#include <time.h>
using namespace std;
int main()
{
int x,k;
string tekst;
scanf("%d\n %d\n %s", &x, &k, &tekst);
if(x==1)
{
for(int i=0; i<tekst.length(); i++);
{
tekst[i]=tekst[i]+k;
}
}
else
{
for(int i=0; i<tekst.length(); i++);
{
tekst[i]=tekst[i]-k;
}
}
printf("%s", tekst);
}
Po próbie skompilowania wyskakuje mi taki oto błąd:
Wiersz | Kolumna | Plik | Komunikat |
---|---|---|---|
C:\Users\Kuba\Desktop\Informatyka\Szyfr Cezara.cpp | In function 'int main()': | ||
17 | 10 | C:\Users\Kuba\Desktop\Informatyka\Szyfr Cezara.cpp | [Error] name lookup of 'i' changed for ISO 'for' scoping [-fpermissive] |
17 | 10 | C:\Users\Kuba\Desktop\Informatyka\Szyfr Cezara.cpp | [Note] (if you use '-fpermissive' G++ will accept your code) |
24 | 10 | C:\Users\Kuba\Desktop\Informatyka\Szyfr Cezara.cpp | [Error] name lookup of 'i' changed for ISO 'for' scoping [-fpermissive] |
27 | 20 | C:\Users\Kuba\Desktop\Informatyka\Szyfr Cezara.cpp | [Error] cannot pass objects of non-trivially-copyable type 'std::string {aka class std::basic_string<char>}' through '...' |
I tutaj proszę o pomoc, bo się zaciąłem. Co kompilatorowi nie pasuje z tym "i"? Przecież zostało wcześniej zadeklarowane w pętli for.
Proszę o wskazówki co jest nie tak, ewentualnie jakieś pouczenie. Nie chciałbym gotowego kodu.
Z góry dziękuję.