PP0504B - StringMerge
Ostatnio zmodyfikowano 2016-05-11 20:24
ja4563 Temat założony przez niniejszego użytkownika |
PP0504B - StringMerge » 2016-05-11 19:18:13 Hej, mam problem - czy ktoś widzi błąd w poniższym programie? Jego zadaniem jest wypisywanie na wyjście sklejonych ze sobą naprzemianlegle, po jednym znaku, dwóch napisów. W przypadku, gdy jeden napis się zakończy nie kontynuujemy działania. Testy podane na stronie(napisane tam) przeszedł śpiewająco - a sędzia go nie przyjmuje. Oto kod: #include <iostream> #include <cstring> using namespace std; const int T_SIZE = 1001;
char * string_merge( char * S1, char * S2 ) { char napis[ T_SIZE ]; int licz = 0; int i = 0; while( S1[ i - licz ] != '\0' && S2[ i - licz ] != '\0' ) { napis[ i ] = S1[ i - licz ]; napis[ i + 1 ] = S2[ i - licz ]; i = i + 2; licz++; } napis[ i ] = '\0'; return napis; }
int main() { int t; char S1[ T_SIZE ], S2[ T_SIZE ], * S; cin >> t; while( t ) { cin.clear(); cin.sync(); cin.getline( S1, T_SIZE, ' ' ); cin.getline( S2, T_SIZE ); S = string_merge( S1, S2 ); cout << S << endl; delete[] S; t--; } return 0; }
|
|
carlosmay |
» 2016-05-11 19:25:49 W C++ używamy const zamiast #define T_SIZE 1001 . |
|
ja4563 Temat założony przez niniejszego użytkownika |
» 2016-05-11 19:32:36 Widać przesiadkę z C? Ok, ale to jednak nie dotyka istoty problemu. :) |
|
mateczek |
» 2016-05-11 19:36:41 u mnie program nie działa w ogóle !!! |
|
carlosmay |
» 2016-05-11 19:37:17 Testy podane na stronie(napisane tam) przeszedł śpiewająco - a sędzia go nie przyjmuje. |
Jakie testy i czego nie akceptuje sędzia? |
|
carlosmay |
» 2016-05-11 19:48:23 |
|
mateczek |
» 2016-05-11 19:52:10 //edit: luknołem na treść na spoju!!! Napisy są podawanie w jednej Lini getline odpada!!! w stylu : aaa bb #include <iostream> #include <cstring> using namespace std; const int T_SIZE = 1001;
char * string_merge( char * S1, char * S2 ) { char * napis = new char[ T_SIZE ]; int licz = 0; int i = 0; while( S1[ licz ] != '\0' && S2[ licz ] != '\0' ) { napis[ i ] = S1[ licz ]; napis[ i + 1 ] = S2[ licz ]; i = i + 2; licz++; } napis[ i ] = '\0'; return napis; }
int main() { int t; char S1[ T_SIZE ], S2[ T_SIZE ], * S; cin >> t; while( t-- ) { cin.ignore(); cin >> S1 >> S2; S = string_merge( S1, S2 ); cout << S << endl; delete[] S; } return 0; }
|
|
ja4563 Temat założony przez niniejszego użytkownika |
» 2016-05-11 20:10:08 Spokojnie, spokojnie. :)
@mateczek - zmieniłeś indeksy tablic - rzeczywiście, niepotrzebne działania tam robiłem - ale działać musiało. Różnica intów jako indeks to nic dziwnego, wydaje się. Poza tym, do mainowego while'a dodałeś dekrementację. Naprawdę, wydaje mi się, że to nie jest odkrycie koła.
@carlosmay - testy in/out. Gdy wprowadzam dane, dane wyjściowe zgadzają się. Cała filozofia. SPOJ natomiast twierdzi, że odpowiedź jest błędna. |
|
« 1 » 2 |