Zadanie szyfr Cezara.

0

Jakiś pomysł dlaczego sędzia nie akceptuje?
http://pl.spoj.com/problems/JSZYCER/

#include <iostream>
#include <string>

using namespace std;

int main()
{
    string tekst;
    getline(cin, tekst);

    for(int i=0; i<=tekst.length()-1; i++)
    {
        if(tekst[i] == 'Z') { tekst[i] = 'C'; } 
        else if(tekst[i] == 'Y') { tekst[i] = 'B'; }
        else if(tekst[i] == 'X') { tekst[i] = 'A'; }
        else if(tekst[i] == 32 ) { tekst[i] = 32; }
        else {tekst[i] += 3;}
    }
		    
    cout << tekst << endl;	
	    
    return 0;
}
0

Zgaduję, że chodzi o to, że pobierasz tylko jedną linię, a zadanie przewiduje tekst w wielu liniach.

0

A co twój program zwraca dla przykładowych danych:

ABC DEF
TERA EST ROTUNDA

? Zwróci odpowiedź tylko dla 1 linii bo czytasz tylko tyle...

0

Teraz wyrzuca mi błąd naruszenia ochrony pamięci. W którym miejscu go popełniam?

#include <iostream>
#include <string>

using namespace std;

int main()
{
    string tekst;
   	
   	while(getline(cin, tekst))
   	{
		for(int i=0; i<=tekst.length()-1; i++)
		{
		    if(tekst[i] == 'Z') { tekst[i] = 'C'; } 
		    else if(tekst[i] == 'Y') { tekst[i] = 'B'; }
		    else if(tekst[i] == 'X') { tekst[i] = 'A'; }
		    else if(tekst[i] == 32 ) { tekst[i] = 32; }
		    else {tekst[i] += 3;}
		}
		    
		cout << tekst << endl;	
	}
	    
    return 0;
}
0

Popełniasz błąd tutaj:

for(int i=0; i<=tekst.length()-1; i++)

Nie rób tak, lepiej warunek dać taki:

i < tekst.length()

Bo jeśli tekst jest zerowy (a wysypuje się właśnie dla pustych linii), to od 0 odejmujesz 1, tylko, że tekst.length jest liczbą bez znaku...

0

Rozumiem, że wtedy niejako rezerwuję pamięć na TYP_MAX?

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