• 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,300 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,300 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,300 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ź 162 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,148 wizyt
pytanie zadane 9 kwietnia 2015 w C i C++ przez Jakub Norek Użytkownik (560 p.)
Porady nie od parady
Zadając pytanie postaraj się o odpowiedni tytuł, kategorię oraz tagi.Tagi

63,177 zapytań

109,411 odpowiedzi

228,567 komentarzy

42,799 pasjonatów

Przeglądających: 206
Pasjonatów: 14 Gości: 192

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.

...