Ĺadny brzuch
Co jest złego w kodzie: (kliknij - treść zadania). Pokazuje mi, że błędna odpowiedź. Działają nie tylko zestawy z przykładu, ale także próbowalem kilkanaście razy z różnymi przypadkami. Zawsze działa tak, jak należy. Czy ma znaczenie to, że wywaliłem #include <string> (bo po co mi ona?)?
#include <iostream> #define T_SIZE 1001 using namespace std; char* string_merge(char *p, char *d) { unsigned i =0; while(p[i]&&d[i]) { ++i;} unsigned b = 2*i; char * wsk=new char[b]; for(i=0; i<b; ++i) if(i%2==0) wsk[i]=*p++; else wsk[i]+=*d++; return wsk; } int main(){ int t,n; char S1[T_SIZE], S2[T_SIZE], *S; cin >> t; /* wczytaj liczbę testów */ cin.getline(S1,T_SIZE); while(t){ cin.getline(S1,T_SIZE,' '); cin.getline(S2,T_SIZE); S=string_merge(S1,S2); cout << S << endl; delete[] S; t--; } return 0; }
Użytkownik Grzese edytował ten post 27 grudzień 2007, 23:05
A co z na końcu ciągu?
#include <iostream> #define T_SIZE 1001 using namespace std; char* string_merge(char *p, char *d) { unsigned i =0; while(p[i]&&d[i]) { ++i;} unsigned b = 2*i+1; char * wsk=new char[b]; for(i=0; i<b; ++i) if(i%2==0) wsk[i]=*p++; else wsk[i]+=*d++; --i; wsk[i]=' '; return wsk; } int main(){ int t,n; char S1[T_SIZE], S2[T_SIZE], *S; cin >> t; /* wczytaj liczbę testów */ cin.getline(S1,T_SIZE); while(t){ cin.getline(S1,T_SIZE,' '); cin.getline(S2,T_SIZE); S=string_merge(S1,S2); cout << S << endl; delete[] S; t--; } return 0; }
Także nie działa.
bo to nie ma być spacja, tylko null
wsk[i]=0;
#include <iostream> #define T_SIZE 1001 using namespace std; char* string_merge(char *p, char *d) { unsigned i =0; while(p[i]&&d[i]) { ++i;} unsigned b = 2*i+1; char * wsk=new char[b]; for(i=0; i<b; ++i) if(i%2==0) wsk[i]=*p++; else wsk[i]+=*d++; --i; wsk[i]=0; return wsk; } int main(){ int t,n; char S1[T_SIZE], S2[T_SIZE], *S; cin >> t; /* wczytaj liczbę testów */ cin.getline(S1,T_SIZE); while(t){ cin.getline(S1,T_SIZE,' '); cin.getline(S2,T_SIZE); S=string_merge(S1,S2); cout << S << endl; delete[] S; t--; } return 0; }
Tak próbowałem wcześniej, ale też nie działało... (tzn. u mnie wszystko jest prawidłowo, a "im" się coś nie podoba)
Tylko że ja sprawdzałem w wersji z wsk[i]=NULL (ale to chyba to samo, co?)
Użytkownik Grzese edytował ten post 28 grudzień 2007, 08:38
mnie zastanawia ta linijka:
while(p[i]&&d[i]) { ++i;}
skad wiesz co jest poza pamiecia tablicy?? to sa elementy nieokreslone, nie zawsze jest to 0..
edit:
zawsze jest :P
moj blad, to jest *char ;)
for(i=0; i<b; ++i) if(i%2==0) wsk[i]=*p++; else wsk[i]+=*d++; <<<
a te "+=" skad??
nie masz wyzerowanej tablicy :>
Użytkownik fernandez edytował ten post 28 grudzień 2007, 13:35
Dzięki!
Nie zauważyłem, że nie zmieniłem += na =. Teraz działa.
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
#include <iostream> #define T_SIZE 1001 using namespace std; char* string_merge(char *p, char *d) { unsigned i =0; while(p[i]&&d[i]) { ++i;} unsigned b = 2*i; char * wsk=new char[b]; for(i=0; i<b; ++i) if(i%2==0) wsk[i]=*p++; else wsk[i]+=*d++; return wsk; } int main(){ int t,n; char S1[T_SIZE], S2[T_SIZE], *S; cin >> t; /* wczytaj liczbę testów */ cin.getline(S1,T_SIZE); while(t){ cin.getline(S1,T_SIZE,' '); cin.getline(S2,T_SIZE); S=string_merge(S1,S2); cout << S << endl; delete[] S; t--; } return 0; }
Użytkownik Grzese edytował ten post 27 grudzień 2007, 23:05
A co z na końcu ciągu?
#include <iostream> #define T_SIZE 1001 using namespace std; char* string_merge(char *p, char *d) { unsigned i =0; while(p[i]&&d[i]) { ++i;} unsigned b = 2*i+1; char * wsk=new char[b]; for(i=0; i<b; ++i) if(i%2==0) wsk[i]=*p++; else wsk[i]+=*d++; --i; wsk[i]=' '; return wsk; } int main(){ int t,n; char S1[T_SIZE], S2[T_SIZE], *S; cin >> t; /* wczytaj liczbę testów */ cin.getline(S1,T_SIZE); while(t){ cin.getline(S1,T_SIZE,' '); cin.getline(S2,T_SIZE); S=string_merge(S1,S2); cout << S << endl; delete[] S; t--; } return 0; }
Także nie działa.
bo to nie ma być spacja, tylko null
wsk[i]=0;
#include <iostream> #define T_SIZE 1001 using namespace std; char* string_merge(char *p, char *d) { unsigned i =0; while(p[i]&&d[i]) { ++i;} unsigned b = 2*i+1; char * wsk=new char[b]; for(i=0; i<b; ++i) if(i%2==0) wsk[i]=*p++; else wsk[i]+=*d++; --i; wsk[i]=0; return wsk; } int main(){ int t,n; char S1[T_SIZE], S2[T_SIZE], *S; cin >> t; /* wczytaj liczbę testów */ cin.getline(S1,T_SIZE); while(t){ cin.getline(S1,T_SIZE,' '); cin.getline(S2,T_SIZE); S=string_merge(S1,S2); cout << S << endl; delete[] S; t--; } return 0; }
Tak próbowałem wcześniej, ale też nie działało... (tzn. u mnie wszystko jest prawidłowo, a "im" się coś nie podoba)
Tylko że ja sprawdzałem w wersji z wsk[i]=NULL (ale to chyba to samo, co?)
Użytkownik Grzese edytował ten post 28 grudzień 2007, 08:38
mnie zastanawia ta linijka:
while(p[i]&&d[i]) { ++i;}
skad wiesz co jest poza pamiecia tablicy?? to sa elementy nieokreslone, nie zawsze jest to 0..
edit:
zawsze jest :P
moj blad, to jest *char ;)
for(i=0; i<b; ++i) if(i%2==0) wsk[i]=*p++; else wsk[i]+=*d++; <<<
a te "+=" skad??
nie masz wyzerowanej tablicy :>
Użytkownik fernandez edytował ten post 28 grudzień 2007, 13:35
Dzięki!
Nie zauważyłem, że nie zmieniłem += na =. Teraz działa.