Szyfr Cezara C++ Builder 6

0

Witam chciałem zrobić szyfr cezara w C++ Builderze 6 od Borlandu, lecz nie działa mi przesuwanie znaków. Czy wie ktoś co mogę zmienić, żeby wszystko działało? Niżej daję kod.
(program działał w konsoli wcześniej)

         String szyfr = szyfrdo->Text;
        int p=szyfr.Length();

	for (int i=0 ; i<p ; i++)
	{
                szyfr[i]=(char)((int) szyfr[ i ] + 3);
	}
        Label1->Caption = szyfr;
1

Kompletnie zbędne rzutowanie. Wytłumacz mi co się dzieje, gdy używasz "szyfru" na stringu "z".

0

Faktycznie to było złe, poprawiłem na coś takiego i ponownie działa w konsoli a w builderze nie :/

void __fastcall TForm1::Button1Click(TObject *Sender)
{
        String szyfr = szyfrdo->Text;
        int p=szyfr.Length();

	for (int i=0 ; i<p ; i++)
	{
             if(szyfr[i]=='x') { szyfr[i]='a';}
             else if(szyfr[i]=='y') { szyfr[i]='b';}
             else if(szyfr[i]=='z') { szyfr[i]='c';}
             else { szyfr[i] = szyfr[ i ] + 3 ; }
	}
        Label1->Caption = szyfr;
} 
1

o kurde :D

Zainteresuj się modulo (operator %).

W jaki sposób "nie działa"? Może trzeba odświeżyć coś, aby nowa zawartość została wyświetlona.

0

Nie działa, czyli jak klikam "zaszyfruj" to dostaje taki błąd:

"Project cezar.exe raised exception class EAccessViolation with message 'Access violation at address 40009720 in module 'rtl60.bpl'. Read of address B9102603'. Process stopped. Use Step or Run to continue."

1

starasz sie wywolac metode na nullu. Jakis obiekt masz nie zainicjalizowany

0

tak kombinuje i tylko to mi crashuje program:

              if(szyfr[i]=='x') { szyfr[i]='a';}
             else if(szyfr[i]=='y') { szyfr[i]='b';}
             else if(szyfr[i]=='z') { szyfr[i]='c';}
             else { szyfr[i] = szyfr[ i ] + 3 ; }

Czy jest w tym coś błędnego? Albo czy da się jakoś inaczej przesunąć litery?

0

Nieważne, już rozumiem o co chodzi i nie jestem niezręczny tylko tępy :)
Wystarczyło w pętli zacząć od 1 i skończyć na p+1 :)

void __fastcall TForm1::Button1Click(TObject *Sender)
{
// Label1->Caption = szyfrdo->Text;
        String doszyfr = szyfrdo->Text;
        int p=doszyfr.Length();
  //      Label1->Caption = p;
        int pom;
       	for (int i=1 ; i<p+1 ; i++)
	{
             if(doszyfr[i]=='x') { doszyfr[i]='a';}
             else if(doszyfr[i]=='y') { doszyfr[i]='b';}
             else if(doszyfr[i]=='z') { doszyfr[i]='c';}
             else { doszyfr[i] = doszyfr[ i ] + 3 ; }
	}
        Label1->Caption = doszyfr;
} 

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