C++ Szyfrowanie za pomocą różnicy symetrycznej znaków

0

Witajcie,
mam problem z zadaniem o takiej treści:

Napisać funkcję, która wykonuje operację różnicy symetrycznej
kodów ascii dwóch znaków podanych jako jej argumenty i zwraca
wynik w postaci kodu ascii (typ char). Następnie wykorzystać
tą funkcję do szyfrowania napisu s1 innym łańcuchem znaków (kluczem
szyfrującym) s2. Przyjąć, że długość napisu s2 jest nie większa
niż długość napisu s1. Założyć, że długość łańcucha s1 nie
przekracza 120 znaków. Program powinien również, w celach
kontrolnych deszyfrować szyfrogram (zaszyfrowany napis).

Kod programu niby mam, ale nie działa dla każdego szyfru (nie ma tu znaczenia długość, bo raz działa mi np. dla 5 znakowego, a przy innym o tej samej już nie). Męczę się z tym już chwilę i nie mogę dojść co jest nie tak.

#include <cstdlib>
#include <iostream>
#include <cstring>

using namespace std;
char t[120], s[120], w[120];

char roznica(char z1, char z2) {
	return char(unsigned(z1^z2));
}

char szyfruj(char a[], char b[]) {
	int j=0;
	for(int i=0;i<strlen(a);i++) {
		if(j>strlen(b)) {j=0;}
		w[i]=roznica(a[i],b[j]);
		j++;
	}

}

int main(int argc, char *argv[])
{
	cout << "Podaj tekst do szyfrowania: ";	cin.getline(t,120);
	cout << "Podaj szyfr: "; cin.getline(s,120);
    cout << endl;
    
    if(strlen(s)>strlen(t)) cout << "Szyfr nie moze byc dluzszy niz tekst." << endl;
    else {
		cout << "Zaszyfrowany: ";
	    szyfruj(t,s);
	    for(int i=0; i<strlen(w);i++) cout << w[i];
	    cout << endl;
	    
	    szyfruj(w,s);
	    cout << "Po deszyfracji: ";
	    for(int i=0; i<strlen(w);i++) cout << w[i];
	    cout << "\n\n";
	}
	system("PAUSE");
    return EXIT_SUCCESS;
}
0

Problem rozwiązany. Wystarczyło zapisać dł. tekstu zaraz po pobraniu do jakiejś zmiennej i używać jej w funkcjach.

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