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; }
|
|
nanoant20 |
» 2019-10-26 21:48:33 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; |
|
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 :/ #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; }
|
|
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 while( getline( cin, napis ) ) { szyfr( napis );
|
|
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 |
|
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 :/ | Mam problem z zadaniem ze SPOJa |
|
nanoant20 |
» 2019-10-27 22:29:43 do sprawdzenia na SPOJ'u 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 ); }
|
|
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 ;) #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 |
|
« 1 » |