Cyfr Cezara - dziwne zachowanie continue;

0

Witam, to znów ja z moim zadankiem. ^^''

Tak wygląda 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", &x, &k);
	cin>>tekst;
	if(x==1)
	{
		for(int i=0; i<tekst.length(); i++)
		{
			if(tekst[i]<65 || 90<tekst[i]<97 || 122<tekst[i])
			{
				continue;
			}
			if(tekst[i]>=97 && tekst[i]+k>122 || tekst[i]<=90 && tekst[i]+k>90)
			{
				tekst[i]=tekst[i]+k-26;
			}
			else
			{
				tekst[i]=tekst[i]+k;
			}
		}
	}
	else
	{
		for(int i=0; i<tekst.length(); i++)
		{
			if(tekst[i]<65 || 90<tekst[i]<97 || 122<tekst[i])
			{
				continue;
			}
			if(tekst[i]>=97 && tekst[i]-k<97 || tekst[i]-k<65)
			{
				tekst[i]=tekst[i]-k+26;
			}
			else
			{
				tekst[i]=tekst[i]-k;
			}
		}
	}
	cout<<tekst;
}

"Continue" działa - z tego co pojąłem z forów - na zasadzie "olewania" dalszej części pętli i robienia jej od nowa, podwyższając w moim przypadku zadeklarowane w pętli "i" o jeden.

Tylko, że jest jeden problem.
Program zachowuje się bodajże tak, jakbym użył "break", bo nic w moim stringu nie zmienia i mam wrażenie, że przeskakuje od razu tu:

 cout<<tekst; 

Dlaczego tak się dzieje?

2

90<tekst[i]<97 to nie działa tak jak myślisz.

0

jak dasz warunki w odpowiedniej kolejności to niepotrzebne ci będzie to continue.

0

Wydaje mi sie ze przekombinowales cos z kodem:
http://ideone.com/jG7JoX

2
krwq napisał(a):

Wydaje mi sie ze przekombinowales[...] link...

Też trochę przekombinowałeś :>

string rot(string s, int r){
	for(auto &letter : s)
		if(isalpha(letter)){
			auto letterSize = isupper(letter)?'A':'a';
			letter = (letter-letterSize+r)%NO_LETTERS+letterSize;
		}
	return s;
}

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