• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

String merge - problem

Object Storage Arubacloud
0 głosów
213 wizyt
pytanie zadane 10 lutego 2019 w C i C++ przez Michał_Warmuz Mądrala (5,830 p.)
edycja 10 lutego 2019 przez Michał_Warmuz

Cześć. Mam problem chcodzi o to ze nie wiem dlaczego tu jest blad. Mam prosbe mógłby mnie ktos naprowadzić na słuszną sciezke z góry bardzo dziekuje :)

#include <iostream>
#include <cstring>

using namespace std;

#define T_SIZE 1001

char* string_merge(char *S1, char *S2) {

    int dl1 = strlen(S1);
    int dl2 = strlen(S2);

    if(dl1 > dl2) {

        char * wynik = new char[dl1];
        int k=0;
        for(int i=0; i<dl1; i++) {
            if(i%2 == 0) {
                wynik[k]+=S1[i];
                k++;
            }
            else {
                wynik[k]+=S2[i];
                k++;
            }
        }
        return wynik;
    }
    else {
        char * wynik = new char[dl2];
        int k=0;
        for(int i=0; i<dl2; i++) {
            if(i%2 == 0) {
                wynik[k]+=S1[i];
                k++;
            }
            else {
                wynik[k]+=S2[i];
                k++;
            }
        }
        return wynik;
    }
}

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;
}

 

1 odpowiedź

0 głosów
odpowiedź 10 lutego 2019 przez j23 Mędrzec (194,920 p.)

Warunek w linii 13 powinien być taki:  if(dl1 < dl2). Teraz indeksujesz poza zakresem.

komentarz 10 lutego 2019 przez Michał_Warmuz Mądrala (5,830 p.)
edycja 10 lutego 2019 przez Michał_Warmuz
Kurcze faktycznie tylko nie wiem czemu gdy daje bb a to wyskakuje mi tylko b
komentarz 10 lutego 2019 przez j23 Mędrzec (194,920 p.)
edycja 10 lutego 2019 przez j23

Ten kod to chyba nie jest twój, co? Wyskakuje tylko b, bo a to jeden znak, więc kopiowany będzie max jeden znak (z tablicy S1).


BTW, tę twoją funkcję można zredukować do:

char* string_merge(const char *S1, const char *S2) 
{
	size_t n = std::min(strlen(S1), strlen(S2));
	char* result_tab = new char[n + 1];

	for(size_t i = 0; i < n; ++i) 
	{
		if(i % 2 == 0) result_tab[i] = S1[i];
		else result_tab[i] = S2[i];
	}

	result_tab[n] = 0;
	return result_tab;
}

 

komentarz 10 lutego 2019 przez Michał_Warmuz Mądrala (5,830 p.)
Ten program działa tak samo. drukuje tylko a a powinno byc z a bb wynik ab
komentarz 10 lutego 2019 przez j23 Mędrzec (194,920 p.)
Ten kod, który podałem to racjonalniejsza wersja twojego kodu. Funkcjonalnie to jest to samo (pomijając błędy).

 

Może napisz, co dokładnie ta funkcja ma robić.

Podobne pytania

0 głosów
1 odpowiedź 952 wizyt
pytanie zadane 9 marca 2018 w C i C++ przez Lucash Nowicjusz (240 p.)
0 głosów
0 odpowiedzi 112 wizyt
pytanie zadane 14 marca 2023 w SPOJ przez skyynet Początkujący (410 p.)
+1 głos
1 odpowiedź 201 wizyt

92,556 zapytań

141,404 odpowiedzi

319,562 komentarzy

61,942 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...