• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Wczytywanie wyrazów z pliku. Liczba wyrazów w pliku [C]

Object Storage Arubacloud
0 głosów
1,008 wizyt
pytanie zadane 16 listopada 2016 w C i C++ przez Mordziaty2 Nowicjusz (230 p.)
zamknięte 19 listopada 2016 przez Mordziaty2
Cześć,

Dopiero zaczynam zabawę z programowaniem w języku C, więc proszę o wyrozumiałość. Chcę wczytać wyrazy z pliku do tablicy tak, aby potem móc ją posortować. Dodam, że nie wiem ile będzie wyrazów w pliku, a może być ich bardzo dużo dlatego mój pomysł ze stworzeniem tablicy dwuwymiarowej "na sztywno" nie jest zbyt dobry, bo po pierwsze wiem, że marnuje pamięć w przypadku, gdy wyrazów jest mało, a gdy plików jest dużo mogą się nie zmieścić w tablicy. Próbowałem oswoić się z funkcjami typu malloc czy buforami, ale przyznam szczerze, że jeszcze nie do końca to rozumiem, a więc zostałem przy dwuwymiarowej tablicy. Miałem pomysł, żeby chociaż jeden wymiar tablicy uzależnić od tego jak dużo jest wyrazów w pliku. Chciałbym policzyć wyrazy w pliku i później stworzyć tablicę z odpowiednią liczbą wierszy (długość wyrazów, czyli drugi wymiar ustaliłbym "na sztywno" albo znalazł najdłuższy wyraz i tak wpisał). Jak się do tego zabrać i jakie rozwiązanie mi doradzacie?

Z góry dziękuje.
komentarz zamknięcia: .

2 odpowiedzi

0 głosów
odpowiedź 16 listopada 2016 przez Knayder Nałogowiec (37,640 p.)
wybrane 19 listopada 2016 przez Mordziaty2
 
Najlepsza

W C++ (Nie jestem pewny jak jest z C, ale myślę że powinno być podobnie) jest możliwość zdefiniowania tablicy dynamicznej:

int size=10;
int *tab = new int[size];

W tym przypadku size może być zmienną pobieraną w czasie działania programu.

Aby zrobić w ten sposób tablicę dwu i więcej wymiarową należy:
 

int sizex=10, sizey=20;

int **tab = new int *[sizex];

for(int i = 0; i<sizex; ++i)
    tab[i] = new int[sizey];

Po takim zabiegu możemy już normalnie odwoływać się do elementów tablicy:
 

tab[9][19] = 20;

Pozdrawiam.

komentarz 16 listopada 2016 przez efiku Szeryf (75,160 p.)

Brakuje jeszcze wpisu o delete

0 głosów
odpowiedź 16 listopada 2016 przez lnkoc Stary wyjadacz (13,960 p.)
edycja 16 listopada 2016 przez lnkoc
Ja bym proponował na początek, jeśli zawartość pliku się nie zmienia w trakcie działania programu zaraz po otwarciu pliku przeskanować go podwójną pętlą badającą a) liczbę wyrazów - zwyczajny iterator oraz b) długość najdłuższego z wyrazów. Następnie zaalokować pamięć o odpowiedniej liczbie wierszy (liczba wyrazów) i liczbie kolumn (najdłuższy wyraz + 1 znak na znak NULL '\0' (jeśli używamy c-stringów)) i przeczytać plik jeszcze raz, ale tym razem wpisując wyrazy do zaalokowanej tabeli. Ostatni etap to sortowanie.

Podobne pytania

0 głosów
1 odpowiedź 1,020 wizyt
0 głosów
1 odpowiedź 261 wizyt
pytanie zadane 21 lutego 2018 w JavaScript przez Alan1221 Użytkownik (950 p.)
0 głosów
1 odpowiedź 180 wizyt
pytanie zadane 29 stycznia 2020 w C i C++ przez Flyin Początkujący (310 p.)

92,579 zapytań

141,432 odpowiedzi

319,664 komentarzy

61,965 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...