Hej, mam problem z łatwym zadaniem ze SPOJ.
Napisz funkcję:
char* string_merge(char *, char *);
która sklei ze sobą dwa łańcuchy biorąc na przemian po jednym znaku z każdego łańcucha i umieści w nowej dynamicznie alokowanej tablicy znaków, do której zwróci wskaźnik. Należy wziąć po tyle znaków ile jest w krótszym łańcuchu.
InputW pierwszej linii liczba testów t, w kolejnych liniach po dwa łańcuchy znaków odzielone spacją.
OutputW każdej linii jeden łańcuch, wynik działania funkcji string_merge.
Napisałem program rozwiązujący ten problem:
#include <iostream>
#include <cstring>
#include <string>
using namespace std;
#define T_SIZE 1001
char* string_merge(char *, char *);
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;
}
char* string_merge(char *S1, char *S2) {
int x1 = strlen(S1);
int x2 = strlen(S2);
int i, j;
if (x1 >= x2) {
char *wskaznik;
wskaznik = new char[2 * x2 + 1];
wskaznik[2 * x2 + 1] = 0;
for (i = j = 0; i <= (2 * x2 - 1); i += 2, j++) {
wskaznik[i] = S1[j];
wskaznik[i + 1] = S2[j];
}
return wskaznik;
} else {
char *wskaznik;
wskaznik = new char[2 * x1 + 1];
wskaznik[2 * x1 + 1] = 0;
for (i = j = 0; i <= (2 * x1 -1); i += 2, j++) {
wskaznik[i] = S1[j];
wskaznik[i + 1] = S2[j];
}
return wskaznik;
}
}
Program jest błędny. Przy takich danych na wejściu:
5
rstuvwxy abcdefghijklmnopq
wqeqweqweq eqweqwe
a bb
abs sfd
ewr w
prawidłowe wyjście to:
rasbtcudvewfxgyh
weqqewqewqewqe
ab
asbfsd
ew
natomiast moje wyjście:
rasbtcudvewfxgyh
weqqewqewqewqey
ab
asbfsd
ew
Czy mógłby ktoś podpowiedzieć mi jak naprawić ten błąd?