Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Szyfr Cezara

Ostatnio zmodyfikowano 2019-10-28 22:18
Autor Wiadomość
Biedrzyk
Temat założony przez niniejszego użytkownika
[C++] Szyfr Cezara
» 2019-10-26 21:05:54
Witam,
robię właśnie zadanie ze SPOJ-a - Szyfr Cezara. Na ideone na outpucie wychodzi mi to co trzeba, jednak spoj nadal nie przyjmuje mi zadania - ktoś mógłby mi podpowiedzieć dlaczego - proszę o wyrozumiałość - jestem początkujący :)


#include <iostream>

using namespace std;

void szyfr(string szyfr)
{
    for(int i=0; i < szyfr.length(); i++)
    {
        if (szyfr >= 'X' && szyfr <= 'Z')
        {
            szyfr= szyfr-22;
        }
        else if (szyfr >= 'A' && szyfr <= 'W')
        {
            szyfr= szyfr+3;
        }
    }
    for(int i=0; i < szyfr.length(); i++)
    {
        cout << szyfr;
    }
}

int main()
{
    string napis;

    while(getline(cin,napis))
    {
    szyfr(napis);
    cout << endl;
    }
    return 0;
}
P-175426
nanoant20
» 2019-10-26 21:48:33
C/C++
szyfr = szyfr - 22;
i szyfr = szyfr + 3;
a nie powinno byc
szyfr[ i ] = szyfr[ i ] + 3;

 tu to samo
if( szyfr >= 'X' && szyfr <= 'Z' )

powinno być
if( szyfr[ i ] >= 'X' && szyfr[ i ] <= 'Z' )


void szyfr( string szyfr )

bardzo mylace, tym bardziej, że
string ma u Ciebie nazwę napis;
P-175427
Biedrzyk
Temat założony przez niniejszego użytkownika
» 2019-10-26 22:05:57
Przepraszam wrzuciłem starszą wersję kodu ;) ten jest właściwy ale nadal jest ten sam problem :/
C/C++
#include <iostream>


using namespace std;

void szyfr( string szyfr )
{
    for( int i = 0; i < szyfr.length(); i++ )
    {
        if( szyfr[ i ] >= 'X' && szyfr[ i ] <= 'Z' )
        {
            szyfr[ i ] = szyfr[ i ] - 22;
        }
        else if( szyfr[ i ] >= 'A' && szyfr[ i ] <= 'W' )
        {
            szyfr[ i ] = szyfr[ i ] + 3;
        }
    }
    for( int i = 0; i < szyfr.length(); i++ )
    {
        cout << szyfr[ i ];
    }
}

int main()
{
    string napis;
   
    while( getline( cin, napis ) )
    {
        szyfr( napis );
        cout << endl;
    }
    return 0;
}
P-175428
nanoant20
» 2019-10-26 23:01:31
Pewnie działa tylko, że z DUŻYMI literami
co bedzie jeżeli string będzie pusty? lub napotka spacje?
trzeba postawić odpowiednie warunki
warunek w tej petli jest zły, pętla nieskończona
C/C++
while( getline( cin, napis ) )
{
    szyfr( napis );



P-175430
Biedrzyk
Temat założony przez niniejszego użytkownika
» 2019-10-27 20:38:53
akurat w treści zadania jest, że mają być wpisywane tylko duże litery :)
właśnie chodzi o to, że drugiej linii nie mogę wpisać, bo po wciśnięciu enter od razu przekształca mi pierwszą linię a mają być min. dwie :/
czyli mówisz, żeby zamienić pętlę na
C/C++
while( true )
P-175442
pekfos
» 2019-10-27 20:57:34
właśnie chodzi o to, że drugiej linii nie mogę wpisać, bo po wciśnięciu enter od razu przekształca mi pierwszą linię a mają być min. dwie :/
» Kurs C++ / FAQMam problem z zadaniem ze SPOJa pytanie/odpowiedź
P-175445
nanoant20
» 2019-10-27 22:29:43
do sprawdzenia na SPOJ'u
C/C++
void szyfr( string napis )
{
    if( !napis.empty() )
    {
        for( int i = 0; i < napis.length(); i++ )
        {
            if( napis[ i ] == 32 )
                 continue;
           
            else if(( napis[ i ] >= 65 ) &&( napis[ i ] <= 87 ) )
            {
                napis[ i ] = napis[ i ] + 3;
            }
            else if(( napis[ i ] >= 88 ) &&( napis[ i ] <= 90 ) )
            {
                napis[ i ] = napis[ i ] - 23;
            }
           
        }
        cout << napis << endl;
    }
}

int main()
{
   
    string napis;
    do
    {
        getline( cin, napis );
        szyfr( napis );
    } while( napis.empty() == false );
   
}
P-175449
Biedrzyk
Temat założony przez niniejszego użytkownika
» 2019-10-28 22:18:45
Zanim włączyłem forum zauważyłem, że powinno być - 23 a nie -22 ;)

C/C++
#include <iostream>

using namespace std;

void szyfruj( string szyfr )
{
    for( int i = 0; i < szyfr.length(); i++ )
    {
        if( szyfr[ i ] >= 'X' && szyfr[ i ] <= 'Z' )
        {
            szyfr[ i ] = szyfr[ i ] - 23;
        }
        else if( szyfr[ i ] >= 'A' && szyfr[ i ] <= 'W' )
        {
            szyfr[ i ] = szyfr[ i ] + 3;
        }
    }
    for( int i = 0; i < szyfr.length(); i++ )
    {
        cout << szyfr[ i ];
    }
}

int main()
{
    string napis;
   
    while( getline( cin, napis ) )
    {
        szyfruj( napis );
        cout << endl;
    }
    return 0;
}

Dzięki za pomoc i naprowadzenie :D
P-175465
« 1 »
  Strona 1 z 1