[Pomoć]Tekst file kao jedna velika matrica u C-u

poruka: 5
|
čitano: 2.242
|
moderatori: Lazarus Long, XXX-Man, vincimus
1
+/- sve poruke
ravni prikaz
starije poruke gore
17 godina
neaktivan
offline
[Pomoć]Tekst file kao jedna velika matrica u C-u

Imam jedan zadatak koji trebam napraviti, ono što me zanima u ovoj temi je dio jednog većeg problema. Naime, u tom dijelu programa trebao bih nekako učitati tekst file u C-u koji izgleda otprilike ovako:

 

stanje1,stanje2,stanje3,q3,stanje5
a,b,c,d
stanje2,stanje5,q3
stanje1
stanje1,a->stanje2
stanje2,b->stanje5

...

 

Program treba čitati file neovisno o broju redaka (napravio sam funkciju koja izbacuje broj redaka, to nije problem), o poretku unutar redaka (znači može npr. biti u prvom retku i q3,stanje2,stanje4,q5).

E sad, mene zanima postoji li nekakav način kako bih pohranio taj tekst file kao jednu veliku dvodimenzionalnu matricu ili kao više jednodimenzionalnih matrica (jedan redak = jedna matrica).

Npr. da se napravi ovakva matrica:

 

stanje1,stanje2,stanje3,q3,stanje5\0
a,b,c,d\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0
stanje2,stanje5,q3\0\0\0\0\0\0\0\0\0
stanje1\0\0\0\0\0\0\0\0\0\0\0\0\0\0
stanje1,a->stanje2\0\0\0\0\0\0\0\0
stanje2,b->stanje5\0\0\0\0\0\0\0\0

itd.

 

I sad npr. ja kažem da printa matrica[2][4] i on izbaci slovo j jer se ono nalazi na tom mjestu u toj matrici.

Ili npr. r3[6] izbaci 1

Nadam se da ste me shvatili. Hvala. :)

 
0 0 hvala 0
16 godina
neaktivan
offline
[Pomoć]Tekst file kao jedna velika matrica u C-u
Napraviš si dovoljno veliku matricu, pogledaš koliko ćeš redaka imati, te za svaki red u fileu, učitavaj znak po znak i dodavaj ga u matricu u trenutni redak do ne dođeš do kraja reda. Kad dođeš do kraja reda u fileu, ideš u sljedeći redak filea i matrice i tak nastavljaš dok ne prođeš kroz sve retke u fileu. U biti, isti način na koji bi učitavao 2D polje charova, samo što nemaš scanf, nego to što već koristiš za učitavanje.
Ili nisam dobro shvatio što želiš?
 
0 0 hvala 0
15 godina
neaktivan
offline
Re: [Pomoć]Tekst file kao jedna velika matrica u C

Jednodimenzionalno polje pokazivaca na svaki zasebno alocirani redak

-jednostavnije, cesto i brze.

 

Vezana lista

-kompliciranija, fleksibilnija i sporija za pretrazivanje.

 

Biraj :D

 

Mislim da ti je ovo prvo jednostavnije:

 

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int main()
{
    char **tekst, *buffer;
    int lines = 10, n;
    FILE *fh;
   
    tekst=(char**)calloc(lines * sizeof(char*), 1);
    buffer=(char*)calloc(2000, 1);
   
    fh=fopen("test.txt", "r");
   
    for (n=0; n<lines; n++)
    {
          buffer=fgets(buffer, 2000, fh);
          if (buffer==NULL)
             break;
          tekst[n]=(char*)malloc(strlen(buffer));
          tekst[n]=strcpy(tekst[n], buffer);
          memset(buffer, 0, 2000);      
    }
   
    fclose(fh);
   
    for (n=0; n<lines; n++) //ispisi cijeli tekst
        printf("%s", tekst[n]);
   
    printf("\n%c\n", tekst[3][2]); //ispisi trece slovo u cetvrtoj liniji
   
    for (n=0; n<lines; n++) //oslobodi svu alociranu memoriju
        free(lines[n]);
    free(lines);
    free(buffer);
   
    system("pause");
    return 0;
}

 

Opaska: ovaj moj primjer koristi dinamicku alokaciju memorije, ako zelis staticku potrebne su neke preinake ali princip je vise manje isti.

Look at you, hacker. A pathetic creature of meat and bone, panting and sweating as you run through my corridors. How can you challenge a perfect, immortal machine?
Poruka je uređivana zadnji put pon 14.3.2011 2:38 (rustweaver).
17 godina
neaktivan
offline
[Pomoć]Tekst file kao jedna velika matrica u C-u

UTR jel? Joooj, trebal bi krenuti kodirati taj labos. De baš daju NKA s epsilon prijelazima... -.-

 

Čisto me zanima, zakaj to u C-u radiš? Puno lakše bi ti bilo s nekim OO jezikom, pogotovo zbog palete metoda za rad sa stringovima, ovak moraš još i te funkcije pisati...

Q: a kako se to linux ponasa kad crkne hdd? A: zastekava svakih 60 sec,ali prezivi se
 
0 0 hvala 0
17 godina
neaktivan
offline
[Pomoć]Tekst file kao jedna velika matrica u C-u

Hvala na odgovoru. Da, radi se o UTR-u. :D

 
0 0 hvala 0
1
Nova poruka
E-mail:
Lozinka:
 
vrh stranice