Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

zadanie ze spoja stringmerge nie zalicza zadania

Ostatnio zmodyfikowano 2015-10-03 19:43
Autor Wiadomość
patox
Temat założony przez niniejszego użytkownika
zadanie ze spoja stringmerge nie zalicza zadania
» 2015-09-27 18:14:44
Witam
Mam problem, ponieważ nie rozumiem, dlaczego nie zalicza mi zadania. Starałem się wykonać to tak jak jest w poleceniu, zalicza testy przykładowe, wyszło mi coś takiego (kod poniżej), druga sprawa nie rozumiem za bardzo co oznaczają te gwiazdki, gdy nie używam ich w pewnych miejscach to kod się nie kompiluje, mógłby mnie ktoś z tym nakierować?
EDIT: LINK DO ZADANIA http://pl.spoj.com/problems/PP0504B/
C/C++
#include <iostream>
#include <cstring>

using namespace std;

#define T_SIZE 1001

char * string_merge( char *, char * );

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

char * string_merge( char * a, char * b )
{
    int l = 0;
   
    while( a[ l ] != '\0' && b[ l ] != '\0' ) {
        ++l;
    }
    int rozmiar = l * 2 + 1;
    char * tab = new char[ rozmiar ];
    for( int i = 0; i < l; i++ )
    {
        tab[ i * 2 ] = a[ i ];
        tab[ i * 2 + 1 ] = b[ i ];
    }
    return tab;
}
P-137964
Monika90
» 2015-09-27 18:49:24
Zapomniałeś zapisać znaku '\0' na końcu wynikowego łańcucha.

Swoją drogą, tak nie należy pisać w C++, w latach dziewięćdziesiątych to by uszło, ale nie teraz.
P-137965
patox
Temat założony przez niniejszego użytkownika
» 2015-09-27 21:43:23
a jak? Możesz mnie nakierować? Będę bardzo wdzięczny. Szczerze powiedziawszy miałem spory problem z tą funkcją, jak zapisałem po swojemu to na początku wywalało mi wiele błędów, zwłaszcza z tymi gwiazdkami i np length, czy tablice w pętli, później dodałem te gwiazdki, new char to pokazywało mi o jedną literę za wiele, gdy a było większe, później źle mi zliczało, to zliczanie w końcu z sizeof (po length i size i end to znalazłem) poprawiłem na te zera i problem dodatkowego znaku znikł, kombinowałem też przed tym z warunkiem w środku pętli, ale różnie to wychodziło, no i odpuściłem na rzecz zer, bo po prostu działało, o ile operacje na stringach przychodzą mi nie wiele łatwiej tak tego to nawet za bardzo nie rozumiem, bo nie ogarniam co robią te gwiazdki, czy zera i w ogóle co to zero zmienia na końcu...
EDIT: Jeszcze nie ogarniam, dlaczego w głównym bloku programu jest zmienna "n", z tego co próbowałem się doszukiwać to nie jest zastosowana w programie, ahh i nie ogarniam dlaczego tak zapisana jest poniższa linijka, o ile dobrze rozumiem nadaje ona wartość wielkości tablicy a i b w mojej funkcji, to nie lepiej jej zadeklarować intem?
#define T_SIZE 1001
P-137974
Monika90
» 2015-09-27 22:57:40
przed return tab; dopisz tab[l * 2] = 0; powinno wystarczyć by SPOJ zaliczył, no chyba że masz jakiś inny błąd którego nie widzę.

Zmienna n jest tam najwyraźniej przez pomyłkę.

#define T_SIZE 1001
 - czegoś takiego używa się w C, porządny ceplusplusowy sposób definiowania stałych to
const int t_size = 1001;
P-137978
patox
Temat założony przez niniejszego użytkownika
» 2015-09-28 06:49:38
Akurat tamto wcześniejsze zdanie załapałem po 2 próbie edycji kodu i spoj mi załapał.
"Zapomniałeś zapisać znaku '\0' na końcu wynikowego łańcucha. "
Jeżeli chodzi o zadanie to define było w gotowcu, a polecenie const widziałem już parę razy i z tego co wiem to jedynie czym się różni od zwykłego inta to tym, że nie można go modyfikować, więc tego do tej pory nie używałem, aby nie było tak, że jakiś błąd program mi wyrzuca i nie wiem o co chodzi, a więc przy okazji pytanie. Czy ten const będzie działać w innych funkcjach mimo tego, że w funkcji nie ma argumentu? Nie bardzo wiem czym poza tym, że się nie da tego zmienić to się różni. Druga rzecz to nie bardzo wiem jak zapisać tą pętlę while zliczającą tablicę inaczej, przy sizeof wartość zawsze była równa 4. Chociaż, może to dlatego że to oblicza ile bitów ma zmienna, a nie jej wartość, bo sobie przypomniałem pisząc ten post, że coś takiego było tutaj w początkowych kursach w takim razie nie wiem jak obliczyć ile znaków ma tablica char oprócz tego sposobu z tą pętlą while. Oprócz tego define coś jeszcze powinienem tutaj zmieniać na bardziej c++ język? Teraz to już pytam z czystej ciekawości, aby nie robić takich błędów w przyszłości... a jeżeli chodzi o te gwiazdki to już wiem, że to wskaźniki o których się będę musiał nauczyć.
P-137980
JMII89
» 2015-09-28 07:39:43
Poco używasz char* skoro jest coś takiego jak string?
P-137981
carlosmay
» 2015-09-28 09:10:24
const int size = 1001;
 oznacza wartość stałą, nic więcej.
Błędy będą przy próbie przypisania do tej zmiennej innej wartości, bądź próbie modyfikacji (np. inkrementacja)

Czy ten const będzie działać w innych funkcjach mimo tego, że w funkcji nie ma argumentu?
 Jeśli będzie to stała globalna.

P-137982
patox
Temat założony przez niniejszego użytkownika
» 2015-09-28 13:16:07
@JMII89 tylko dlatego że w poleceniu napisane jest
"
Napisz funkcję:

char* string_merge(char *, char *);
"
Robiłem podobne zadanie w szkole na stringach i poszło mi bez problemu, tutaj już niestety nie.
@carlosmay dziękuję
P-137986
« 1 » 2 3
  Strona 1 z 3 Następna strona