Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Salve a tutti, sto realizzando un progetto in C che prevede la lettura di un testo da file e memorizza in una struttura ogni parola,il numero di volte che questa è stata trovata e in quali righe.
Per la lettura delle parole uso:
int result = fscanf(in, "%255[^ \f\n\r\t\v]%c", buffer, &c);
quindi result = 0 stringa vuota
result = EOF break
quindi result = 2 allora dovrei metterla in una struttura. Il problema è che da dentro buffer non riesco a tirare fuori la parola per poterla salvare. Sto usando una struttura
che è fatta in questo modo:
typedef struct word{
char* parola;
short conto;
}recordi;
dove dovrei mettere la parola e quante volte l'ho trovata (conto) e un'altra invece fatta così (una coda concatenata):
typedef struct{
int key;
}elemento;
typedef struct coda *coda_pointer;
typedef struct coda{
elemento item;
coda_pointer link;
};
dove in key metterò il numero di riga della parola.
In questo link c'è l'immagine di come dovrebbe essere il risultato.
www.allfreeportal.com/imghost2/thumbs/934760riferiementi.JPG
Ci sto sbattendo la testa da 2 settimane ma proprio non riesco a fare questo stupido progetto! ringrazio in anticipo.
ti allego il file.. Così vedi il codice ho commentato le funzioni e le ho inserite nel main perchè era impossibile passare la variabile buffer alle funzioni.
Dalla riga 80 in poi cerco di memorizzare la parola nella struttura..
Ultima modifica effettuata da mxxforever il 01/08/2010 alle 18:43
forse non mi sono spiegata bene.
Il mio problema è memorizzare il contenuto della variabile buffer su una struttura, una stringa o una qualunque variabile (non riesco a copiare quello che c'è li dentro lo posso solo visualizzare )
Sinceramente le altre cose che mi hai scritto non le ho capite tanto.. tipo
Codice sorgente - presumibilmente C/C++
void analizza ( file **in );
perchè metti due vole * ? Basta una sola volta quando è un puntatore o no?
Codice sorgente - presumibilmente C/C++
int result = fscanf(*in, "%255[^ \f\n\r\t\v]%s", &buffer);
funziona bene senza usare *in ma solo con in, sono partita da un programma che leggeva ogni singola parola e la mostrava a video ed era scritto con quel codice.
questo è il link del pdf con le spiegazioni sul programma che devo realizzare, così magari si capisce meglio quello che devo fare.
http://www.megaupload.com/?d=WLDLH00G
Ultima modifica effettuata da mxxforever il 08/08/2010 alle 11:24
forse non mi sono spiegata bene.
Il mio problema è memorizzare il contenuto della variabile buffer su una struttura, una stringa o una qualunque variabile (non riesco a copiare quello che c'è li dentro lo posso solo visualizzare )
Sinceramente le altre cose che mi hai scritto non le ho capite tanto.. tipo
Codice sorgente - presumibilmente C/C++
void analizza ( file **in );
perchè metti due vole * ? Basta una sola volta quando è un puntatore o no?
Codice sorgente - presumibilmente C/C++
int result = fscanf(*in, "%255[^ \f\n\r\t\v]%s", &buffer);
funziona bene senza usare *in ma solo con in, sono partita da un programma che leggeva ogni singola parola e la mostrava a video ed era scritto con quel codice.
questo è il link del pdf con le spiegazioni sul programma che devo realizzare, così magari si capisce meglio quello che devo fare.
http://www.megaupload.com/?d=WLDLH00G
Per utilizzare una struttura, prima bisogna istanziarla, non è possibile utilizzare direttamente i membri.
Per analogia, non è possibile memorizzare un numero direttamente in un tipo int, in questo modo:
Codice sorgente - presumibilmente C/C++
...
int = 5;
...
La procedura corretta è:
Codice sorgente - presumibilmente C/C++
...
int numero = 5;
word p; // ora posso utilizzare la struttura tramite la variabile p
...
Per quanto riguarda la funzione analizza, ho messo due asterischi per indicare il pasaggio di un puntatore a un puntatore.
Nel c, i puntatori a filevanno passati per indirizzo, altrimenti viene generato un nuovo stream indipendente dall' originale.