Zadanie Szyfr Cezara w SPOJ

0

Link tu: http://pl.spoj.pl/problems/JSZYCER/
Mam pewien problem napisałem ten program lecz w szyfrowanym tekście nie wypicuje mi spacji? Co jest źle?
KOD:

#include <iostream>
#include <string>

using namespace std;
    int il;
    int o = 0;

    int syfr (string tekst)
    {
        string noob = " ";

        if (tekst[o] > 87 && tekst[o]!= 32)
        {
            tekst[o] = tekst[o] - 23;
            cout << tekst[o];
            return 0;
        }
        if (tekst[o] == 0)
        {
            cout << " ";
            return 0;
        }
        if (tekst[o] < 87)
        {
        tekst[o] = tekst[o] + 3;
        cout << tekst[o];
        return 0;
        }

    }

int main ()
{
    string tekst;



    while(cin >> tekst)
    {
          il = tekst.size();
        while (il > o)
    {
        syfr (tekst);
        o++;
    }

     o = 0;
    }
}
 
0

powinno być raczej coś takiego:

while(getline(cin, tekst)) { // czyta całymi liniami
     cout << cezarSzyruj(tekst) << endl;
}

cin >> tekst czyta tylko to co jest pomiędzy białymi znakami (czyli nie wczytuje spacji, znaku końca linii i tabulatorów).

samo szyfrowanie napisałeś strasznie. Uprość to nie stosując zmiennych globalnych.

0

Ok program działa ale mi do nie przyjmują. Gdzie jest błąd??
KOD:

 
#include <iostream>
#include <string>

using namespace std;


    void syfr (string tekst, int o)
    {
        if (tekst[o] > 87 && tekst[o]!= 32)
        {
            tekst[o] = tekst[o] - 23;
            cout << tekst[o];
            return;
        }
        if (tekst[o] == 32)
        {
            cout << " ";
            return;
        }
        if (tekst[o] < 87)
        {
        tekst[o] = tekst[o] + 3;
        cout << tekst[o];
        return;
        }

    }

int main ()
{
    string tekst;
    int o = 0;
    while(getline(cin, tekst))
    {
        while (tekst.size() > o)
    {
        syfr (tekst, o);
        o++;
    }
    cout << endl;
     o = 0;
    }
}

0

A co jeśli tekst[0]== 87? Zwyczajnie pomijasz W

0
sig napisał(a):

A co jeśli tekst[0]== 87? Zwyczajnie pomijasz W

To wypisuje Z. A X wypysuje A. Przeczytaj terść

0

zrób metodę szyfruj w ten sposób:

void szyfrCezara(string &tekst, int dx = 3) {
    for (int i=0; i<tekst.length(); ++i) {
         if (tekst[i] ...  // dopisz resztę sam
    }
}

zamiast bawić się numerkami pisz normalnie 'A' i 'Z' unikniesz głupich błędów.

0
adao1003 napisał(a):
sig napisał(a):

A co jeśli tekst[0]== 87? Zwyczajnie pomijasz W

To wypisuje Z. A X wypysuje A. Przeczytaj terść

A ty sprawdź, bo u mnie nie wypisuje nic. Zresztą masz ify dla mniejszego niż 87, równego 32, i większego niż 87. natomiast równe 87 nie podpada pod żaden z nich.
edit przykład:
TEN PROGRAM NIE OBSLUGUJE W
WHQ SURJUDP QLH REVOXJXMH

Nie powinno tam być wspomnianego Z na końcu?

editowy ps:Nie tyko czytałem tekst zadania, zaliczyłem je.

0

Dobrze już działa

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