SPOJ PP0504B (SringMerge)

0

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.
Input

W pierwszej linii liczba testów t, w kolejnych liniach po dwa łańcuchy znaków odzielone spacją.
Output

W 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?

0

A to y nie zostaje Ci przypadkiem z poprzednich napisów?

0

mozliwe. jak to naprawic?

1

Przekombinowałeś. Nie chce mi się analizować, ale pewnie chodzi o to, że nie kończysz stringa zerem.

char* string_merge(char * str1, char *str2)
{
    char * result = new char[min(strlen(str1), strlen(str2)) * 2 + 1];
    char * r = result;

    while(*str1 and *str2)
    {
        *r++ = *str1++;
        *r++ = *str2++;
    }
    *r = 0;
    return result;
}
0

dzieki wielkie. zrozumialem juz wszystko ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1