• 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
46 wizyt
pytanie zadane 10 lutego w C i C++ przez Michał_Warmuz Gaduła (4,140 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 Szeryf (89,260 p.)

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

komentarz 10 lutego przez Michał_Warmuz Gaduła (4,140 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 Szeryf (89,260 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,140 p.)
Ten program działa tak samo. drukuje tylko a a powinno byc z a bb wynik ab
komentarz 10 lutego przez j23 Szeryf (89,260 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ź 121 wizyt
pytanie zadane 9 marca 2018 w C i C++ przez Lucash Nowicjusz (240 p.)
+1 głos
1 odpowiedź 111 wizyt
+4 głosów
2 odpowiedzi 2,713 wizyt
pytanie zadane 9 kwietnia 2015 w C i C++ przez Jakub Norek Użytkownik (560 p.)
Porady nie od parady
Komentarze do pytań nie służą do odpowiadania, od tego jest wydzielona sekcja odpowiedzi. Funkcją komentarzy jest natomiast możliwość uzyskania dodatkowych informacji na temat samego posta.Komentarze

60,244 zapytań

105,928 odpowiedzi

220,065 komentarzy

32,445 pasjonatów

Przeglądających: 161
Pasjonatów: 3 Gości: 158

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.

...