Szyfr Cezara-przesunięcie o 13

Szyfr Cezara-przesunięcie o 13
Patryxster :V
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8
0

Potrzebuję stworzyć szyfr, który każdą literę alfabetu łacińskiego zamieni na 12-stą od niej wartość kodu ascii, pozostałe znaki mają pozostać bez zmian
Przykładowo dla słowa "test" poprawny wynik funkcji to "grfg", natomiast u mnie są to jakieś "krzaczki"

Kopiuj
#include <string>
#include<iostream>
using namespace std;

string rot13(string msg)
  
{
  int i=-1;
  int rot;
  for(i=0;i<msg.length();i++)
    {
    
    if(((int(msg[i])>=65)&&(int(msg[i])<=90))||((int(msg[i])>=97)&&(int(msg[i])<=122)))
    
    {   rot=int(msg[i])+12;
        msg[i]=char(rot);
    
    }}
 
  
  return msg;
}

hauleth
  • Rejestracja: dni
  • Ostatnio: dni
3

Co się stanie z z jeśli przesuniesz kod ASCII o 12?

Patryxster :V
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8
0

@hauleth: Nie wiem, jest błąd moim zdaniem w treści zadania, jednak dla "bezpiecznych" liter również on nie ziała poprawnie
dla słowa "test" również wyświetla błędny wynik, chciałbym najpierw wiedzieć czemu w normalnym wypadku działa niepoprawnie

Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
2

No to zastanów się co powinno się stać z literką z kiedy przesuniesz ją o 1 i zobacz czy w swoim kodzie coś takiego obsługujesz.

Patryxster :V
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8
0

@Shalom: Znak "z" zmieni się na znak "{"

Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
3

A co mówi treść zadania? Ma co powinno się zamienić? Nie czasem na a?

Patryxster :V
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8
0

@Shalom: Tak, teraz sprawdziłem, w treści powinno zamienić się na a, myślałem, że błędnie zamienia on na znaki ascii, kod działa jednak poprawnie jeśli chodzi o przesuwanie w kodzie ascii, dziękuję za zwrócenie uwagi

FS
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 46
0

wiesz co to bit shifting ?

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
0
Kopiuj
#include <iostream>
#include <string>
#include <cctype>
using namespace std;


string rot13(string msg)
{
	for(int i=0;i<msg.length();++i)
    {
    	char ch=msg[i],lf;
    	if(islower(ch)) lf='a';
    	else if(isupper(ch)) lf='A';
		else continue;
		msg[i]=lf+(ch-lf+13)%26;
	}
	return msg;
}

int main()
{
	string x="Ala ma kota";
	string y=rot13(x);
	string z=rot13(y);
	cout<<x<<endl;
	cout<<y<<endl;
	cout<<z<<endl;
	return 0;
}

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.