Cyfr Cezara - dziwne zachowanie continue;

Odpowiedz Nowy wątek
2015-02-13 01:06
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?

edytowany 2x, ostatnio: Vis.CouTT, 2015-02-13 01:07

Pozostało 580 znaków

2015-02-13 01:17
2

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

Pozostało 580 znaków

2015-02-13 01:51
0

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

Pozostało 580 znaków

2015-02-13 02:33
0

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


░█░█░█░█░█░█░█░█░█░█░█░

Pozostało 580 znaków

2015-02-13 11:28
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;
}

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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