Przekazywanie słów ze zdania do tablicy wskaźników do tablic.

0

Mam oto taki problem.
Mamy zdanie w takiej formie:
char tab[]="abc abc";

Mam za zadanie rozdzielić je na słowa (przekazując każde do osobnej tablicy dynamicznej) a potem umieścić to w kolejnej tablicy, która po kolei wskazuje na te słowa.
W rezultacie powinno mi z "abc abc" wyrzucić "abcabc". Mogę korzystać tylko z własnych funkcji.

Średnio ogarniam tablice dynamiczne (zacząłem wcześniej coś lizać w javie) i chciałbym was poprosić o pomoc w rozrysowaniu jakiegoś algorytmu...

0

Wymyśliłem coś takiego:

int len(char*, int) - sprawdza długość słowa od inta (w ten sposób będę wiedzieć jaką ma długość np. trzecie słowo)
int wordCount (char *) - będzie liczyć ilość słów w zdaniu (w ten sposób będę miał rozmiar tablicy wskaźników).
char *wordToTab (char *, int, int) - będzie tworzyć tablicę o długości z len(), z jakiegoś miejsca w zdaniu (drugi int). Będzie się zatrzymywać albo na spacji albo na końcu.
char *splitter (char) - będzie wywoływać *wordToTab() w pętli i wyniki tej funkcji będzie łapać w swoją tablicę, którą pod koniec zwróici.

Rozwiązanie wydaje mi się trochę długie. Wydaje mi się, że musi być jakaś możliwość ograniczenia tego do - powiedzmy - dwóch funkcji.

0

Opis zadania stoi w sprzeczności z przykładem, dlatego też udam że tego drugiego nie widziałem.
Jeśli nie możesz korzystać z "cudzych" funkcji, to ja bym na Twoim miejscu jechał znak po znaku w pętli, zwiększając licznik o 1. Jak napotkam spację, mam długość wyrazu w liczniku, wiem ile miejsca muszę zaalokować, malloc() pamiętając o bajcie zerowym, zwiększam licznik wyrazów, kopiuję dane między tablicami (memcpy) i jadę dalej. Jak skończę z podziałem, w liczniku tablic mam zapisane ile miejsca na tablicę wyrazów mam zaalokować, malloc(), kopiuję wskaźniki, return 0.

EDIT: nie, jednak nie. Nie mam przecież gdzie trzymać wskaźników do wyrazów... Hmmm.... Chyba bez skanowania się da.
EDIT2: jak bardzo złożony może to być program? Ja do takich rzeczy jakiś czas temu napisałem sobie małą biblioteczkę z listą powiązaną. Jeśli możesz takie rzeczy stosować, to nie trzeba będzie skanować ciągu dwa razy.

0

Ogólnie program ma być dosyć krótki, do napisania na zajęciach, razem z pięcioma innymi (akurat ten był największy).
Jako iż to są jakieś... ja wiem? Trzecie zajęcia, to myślę, że też rozwiązanie powinno być durnie proste... :)

0

Jeśli ma być durnie proste, to ja widzę dwa wyjścia: albo skanujesz ciąg wejściowy licząc spacje i później alokujesz tablicę na wyrazy o odpowiedniej długości, albo (skoro w Twoim opisie nie informacji, że ma to być tablica dynamiczna) zakładasz sobie z góry maksymalną ilość wyrazów i takiej wielkości tablicę alokujesz statycznie. Pierwszy przypadek jest mało wydajny, gdyż jedziesz po tablicy dwa razy. Drugi może zmarnować Ci pamięć (jeśli ilość wyrazów będzie dużo mniejsza od pojemności tablicy), lub sprawić problem gdy tablica będzie zbyt mała aby pomieścić wszystkie słowa.

1 użytkowników online, w tym zalogowanych: 0, gości: 1