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

String merge - problem

VPS Starter Arubacloud
0 głosów
212 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ź 932 wizyt
pytanie zadane 9 marca 2018 w C i C++ przez Lucash Nowicjusz (240 p.)
0 głosów
0 odpowiedzi 111 wizyt
pytanie zadane 14 marca 2023 w SPOJ przez skyynet Początkujący (410 p.)
+1 głos
1 odpowiedź 200 wizyt

92,452 zapytań

141,262 odpowiedzi

319,085 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...