[C++] Tablica znaków


(Bonzer Kk) #1

Witam, mam problem z zadaniem z Symfonii C++:

"Mamy tablicę znaków w której znajduje się długi C-string będący tekstem, składającym się z kilkunastu wyrazów. Napisz funkcję która przekopiuje ten C-string do dwóch innych tablic. W tablicy parzyste znaleźć mają się parzyste wyrazy C-Stringu, a w tablicy nieparzyste-nieparzyste wyrazy c-stringu. W obu docelowych tablicach wyrazy mają być oddzielone odstępami. Funkcja ta ma być wywoływana z trzema argumentami: adres tablicy źródłowej, adres tablicy na wyrazy parzyste i adres na nieparzyste"

Mam na to pomysł, nie wiem czy dobry: otóż wymyśliłem że można by zacząć kopiować c-string do tablicy nieparzyste aż napotka na znak spacji, wtedy pętla się przerwie, i przejdzie do kolejnej która od tego samego miejsca w c-stringu będzie kopiowała kolejny wyraz aż do spacji do tablicy parzyste. I żeby zapętlić te czynności użyłbym fcji rekurencyjnej i dał jakiś warunek przerwania( gdy string się skończy). Niestety nie daję rady sam tego napisać.

Pozdrawiam, Bonzerr


(Sawyer47) #2

Rekurencja jest tu zbędna. Pokaż co sam zrobiłeś, bo poza tym opis brzmi bardzo sensownie.

Musisz jakoś sobie zdefiniować odstęp (jakaś klasa znaków), za początek słowa można uznać następujące po sobie (początek tekstu lub odstęp, nie-odstęp), za koniec słowa odwrotnie: (nie-odstęp, odstęp lub koniec tekstu).

Gdy napotkasz początek słowa kopiujesz znaki do pierwszej tablicy aż do napotkania końca słowa i powtarzasz na przemian zmieniając tablicę docelową: pierwsza druga (to można zrealizować po prostu jako zamianę dwóch wskaźników ze sobą). Tak jak powiedziałeś, warunkiem zakończenia jest wyczerpanie się końca źródłowego tekstu.


(Bonzer Kk) #3
void funkcja( char zrodlo[], char parzyste[], char nparzyste[])

{

    int i = 0;

    for(i; ; i++)

    {

        parzyste[i] = zrodlo[i];

        if(zrodlo[i] == ' ' )break;

    }

    for(i; ; i++)

    {

        nparzyste[i] = zrodlo[i];

        if(zrodlo[i] == ' ' )break;

    }


}

Tak wygląda tylko ten etap funkcji gdzie przekopiowane są dwa słowa. Niestety to nie działa.

nr47, twój pomysł jest na pewno dobry, niestety chyba trochę za ciężki jak na moje dotychczasowe zdolności.


([alex]) #4

Na tym forum już była dłuuuuuga dyskusja na temat tego zadania z Symfonii, wystarczy poszukać.