Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #define TRUE 1
- #define STRINGA 50
- typedef struct node{
- char *stringa;
- int occorenza;
- struct node *next;
- } NODE, *PNODE;
- NODE *creanodo(void);
- char *leggistringa(FILE *pfile);
- int numocc(NODE *plista, char *str);
- void stampa(NODE *plista);
- int main(){
- PNODE lista, temp;
- char *filename, *parola;
- FILE *file;
- lista = NULL;
- temp = NULL;
- filename = "divinacommedia.txt";
- file = fopen(filename, "r");
- if(file == NULL){
- printf("Impossibile aprire file.\n");
- abort();
- }
- printf("Inzio lettura file.\n");
- while(TRUE){
- temp = lista;
- lista = creanodo();
- if(lista == NULL){
- printf("Memoria non disponibile.\n");
- exit(1);
- }
- printf("acquisisco stringa.\n");
- parola = leggistringa(file);
- printf("stringa: %s\n", parola);
- if(parola == NULL){
- //EOF
- printf("Fine Inserimento.\n");
- break;
- } else if(!numocc(temp, parola)){
- //è la prima volta
- printf("numero occ 1\n");
- lista->stringa = parola;
- lista->occorenza = 1;
- lista->next = temp;
- } else{
- //non è la prima occorrenza quindi libero lo spazio
- printf("non è la prma occ.\n");
- free(lista);
- }
- printf("nodo creato.\n");
- }
- return 0;
- }
- /*
- * funzione per creare spazio a sufficienza in memoria centrale per contenere un nodo di tipo NODE.
- * restituisce il puntatore alle celle riservate dalla malloc, NULL nel caso malloc fallisca l'assegnamento.
- */
- NODE *creanodo(void){
- PNODE tmp;
- tmp = (NODE *) malloc(sizeof(NODE));
- return tmp;
- }
- /*
- * funzione per leggere dal file parola per parola*.
- * restituisce puntatore al primo elemento al vettore di char, NULL di EOF oppure se malloc fallisse nell'assegnare
- * celle di memoria.
- */
- char *leggistringa(FILE *pfile){
- char str[STRINGA], *pstr;
- fscanf(pfile, "%s", str);
- if(feof(pfile)) return NULL;
- pstr = (char *) malloc(strlen(str)+1);
- if(str == NULL){
- printf("Assegnazione fallita");
- abort();
- }
- strcpy(pstr, str);
- return pstr;
- }
- /*
- * funzione per vedere se la parola è stata già letta. Se si incrementa l'occorenza di un unità.
- * Restituisce 0 se è la prima occorrenza altrimenti il numero di occorrenze.
- */
- int numocc(NODE *plista, char *str){
- while(plista != NULL){
- if(strcmp(plista->stringa, str) == 0){
- plista->occorenza++;
- return plista->occorenza;
- }
- plista = plista->next;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement