Ĺadny brzuch
Witam. Mam taki problem, gdyż chciałbym wczytać wyrazy z pliku wyr.txt, linia po linii do listy jednokierunkowej.
Oto jak wygląda lista:
typedef struct WYRAZ
{
char tab[100];
struct WYRAZ *polaczenie;
} ELEMENT;
problem w tym, że(wiem, jak wczytywać np liczby i wstawiać je do listy) ale jak to zrobić w przypadku wyrazów (stringów) ?
Mógłby mi ktoś napisać funkcję za to odpowiedzialną ew wytłumaczyć? Byłbym wdzięczny. Pozdrawiam!
Zapewne getline lub gets cię będzie interesować.
Użytkownik Ali240 edytował ten post 02 styczeń 2008, 12:07
Może sprecyzuję:
typedef ELEMENT *LINK;
a funkcja:
void dodaj(LINK *l, [...] ) { LINK nowy, pom; nowy = (LINK)malloc(sizeof(ELEMENT)); [Dodanie wczytanego słowa do nowy->tab] nowy->polaczenie = NULL; if (*l == NULL) *l = nowy; else { pom = *l; while(pom->polaczenie!=NULL) pom = pom->polaczenie; pom->polaczenie = nowy; } }
W funkcji jeden argument jest wskaźnikiem na listę , a drugi ma musi być właśnie tym wczytanym słowem (wczytaną linią z pliku) żeby program wiedział co ma wstawić. Tego właśnie nie wiem, jak to rozwiązać
Argument raczej będzie typu char*. Pytanie tylko jak potem chcesz to rozwiącać:
Użytkownik Ali240 edytował ten post 02 styczeń 2008, 12:31
Raczej ta 2 opcja wchodzi w grę. Mógłbyś poprostu napisać jak ma wyglądać poprawna sama nazwa funkcji z argumentami i jak wczytać ten drugi argument do nowy->tab ?
Użytkownik TomkoV edytował ten post 02 styczeń 2008, 12:40
Raczej ta 2 opcja wchodzi w grę. Mógłbyś poprostu napisać jak ma wyglądać poprawna sama nazwa funkcji z argumentami i jak wczytać ten drugi argument do nowy->tab ?
Nie :). Mogę podpowiedzieć conajwyżej.
Kopiowanie albo strcpy/strncpy. Alokacja nowej tablicy na podstawie strlen.
// (tu było coś co miało być w innym topicu ^^)
Użytkownik Ali240 edytował ten post 03 styczeń 2008, 23:26
Poradziłem sobie, dzięki za pomoc.
Wprawdzie narazie nie na dynamicznej tablicy, ale nie wykluczam ze tak zrobię potem
Użytkownik TomkoV edytował ten post 03 styczeń 2008, 23:15
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
Oto jak wygląda lista:
typedef struct WYRAZ
{
char tab[100];
struct WYRAZ *polaczenie;
} ELEMENT;
problem w tym, że(wiem, jak wczytywać np liczby i wstawiać je do listy) ale jak to zrobić w przypadku wyrazów (stringów) ?
Mógłby mi ktoś napisać funkcję za to odpowiedzialną ew wytłumaczyć? Byłbym wdzięczny. Pozdrawiam!
Zapewne getline lub gets cię będzie interesować.
Użytkownik Ali240 edytował ten post 02 styczeń 2008, 12:07
Może sprecyzuję:
typedef ELEMENT *LINK;
a funkcja:
void dodaj(LINK *l, [...] ) { LINK nowy, pom; nowy = (LINK)malloc(sizeof(ELEMENT)); [Dodanie wczytanego słowa do nowy->tab] nowy->polaczenie = NULL; if (*l == NULL) *l = nowy; else { pom = *l; while(pom->polaczenie!=NULL) pom = pom->polaczenie; pom->polaczenie = nowy; } }
W funkcji jeden argument jest wskaźnikiem na listę , a drugi ma musi być właśnie tym wczytanym słowem (wczytaną linią z pliku) żeby program wiedział co ma wstawić. Tego właśnie nie wiem, jak to rozwiązać
Argument raczej będzie typu char*. Pytanie tylko jak potem chcesz to rozwiącać:
- l wstawiasz po prostu ten wskaźnik (i na zwenątrz nie zwalniasz tej talibcy)
ll tworzysz nową tablice znaków i kopiujesz dane z argumentu (może się przydać jeżeli słowa będą miały dużą różnicę w ilośći znaków, będziesz miał ich dużo i chcesz zaoszczędzić pamięć kosztem czasu)l
Użytkownik Ali240 edytował ten post 02 styczeń 2008, 12:31
Raczej ta 2 opcja wchodzi w grę. Mógłbyś poprostu napisać jak ma wyglądać poprawna sama nazwa funkcji z argumentami i jak wczytać ten drugi argument do nowy->tab ?
Użytkownik TomkoV edytował ten post 02 styczeń 2008, 12:40
Raczej ta 2 opcja wchodzi w grę. Mógłbyś poprostu napisać jak ma wyglądać poprawna sama nazwa funkcji z argumentami i jak wczytać ten drugi argument do nowy->tab ?
Nie :). Mogę podpowiedzieć conajwyżej.
Kopiowanie albo strcpy/strncpy. Alokacja nowej tablicy na podstawie strlen.
// (tu było coś co miało być w innym topicu ^^)
Użytkownik Ali240 edytował ten post 03 styczeń 2008, 23:26
Poradziłem sobie, dzięki za pomoc.
Wprawdzie narazie nie na dynamicznej tablicy, ale nie wykluczam ze tak zrobię potem
Użytkownik TomkoV edytował ten post 03 styczeń 2008, 23:15