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

String merge - problem

0 głosów
67 wizyt
pytanie zadane 10 lutego w C i C++ przez Michał_Warmuz Gaduła (4,710 p.)
edycja 10 lutego 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 przez j23 VIP (100,840 p.)

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

komentarz 10 lutego przez Michał_Warmuz Gaduła (4,710 p.)
edycja 10 lutego przez Michał_Warmuz
Kurcze faktycznie tylko nie wiem czemu gdy daje bb a to wyskakuje mi tylko b
komentarz 10 lutego przez j23 VIP (100,840 p.)
edycja 10 lutego 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 przez Michał_Warmuz Gaduła (4,710 p.)
Ten program działa tak samo. drukuje tylko a a powinno byc z a bb wynik ab
komentarz 10 lutego przez j23 VIP (100,840 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ź 163 wizyt
pytanie zadane 9 marca 2018 w C i C++ przez Lucash Nowicjusz (240 p.)
+1 głos
1 odpowiedź 114 wizyt
+4 głosów
2 odpowiedzi 3,175 wizyt
pytanie zadane 9 kwietnia 2015 w C i C++ przez Jakub Norek Użytkownik (560 p.)
Porady nie od parady
Wynikowy wygląd pytania, odpowiedzi czy komentarza, różni się od tego zaprezentowanego w edytorze postów. Stosuj więc funkcję Podgląd posta znajdującą się pod edytorem, aby upewnić się, czy na pewno ostateczny rezultat ci odpowiada.Podgląd posta

63,340 zapytań

109,599 odpowiedzi

228,959 komentarzy

44,170 pasjonatów

Przeglądających: 202
Pasjonatów: 7 Gości: 195

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...