Modifica prog in C

Luca_pro

Nuovo Utente
25 Nov 2009
1
0
0
Ciao io ho qst programma che vorrei modificare:

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

//Questo programma memorizza un file in memoria dinamica, ma non memorizza la stessa parola due volte
#define MAX_PAROLE 400000
typedef struct {
char *parola;
int num;
}parole;

void ordina(parole *a[], int n);
void attendi ();

int main(int argc, char* argv[])
{
char frase[100];
parole *libro[MAX_PAROLE];
int i=0, dimensione_totale=0;
int j;
char trovato;
clock_t t1,t2;
float tm;

FILE * pf;

pf=fopen(argv[1],"r");

if (pf==NULL) {
printf("Impossibile aprire il file\n");
return 1;
}

for (i=0;i<MAX_PAROLE;i++) libro=NULL;

i=0;

do {
fscanf (pf,"%s",frase);
if (feof(pf)) break;


for (j=0,trovato=0;libro[j];j++)
if (strcmp(libro[j]->parola,frase)==0){
trovato=1;
libro[j]->num+=1;
break;
}



if (!trovato) {
libro=malloc(sizeof(parole));
libro->parola=malloc(strlen(frase)+1);
dimensione_totale+=strlen(frase)+1;

strcpy (libro->parola,frase);
libro->num=1;
//printf ("%s %d\n",frase,i);

i++;

if (i == MAX_PAROLE-1) {
printf ("Troppe parole. devo fermarmi qui\n");
attendi();
break;
}
}
}while (1);


printf ("\n\nAdesso ristampo il libro\n\n");
attendi();

for (j=0;libro[j];j++)
printf ("%4d %-25s presente %d volte\n",j,libro[j]->parola,libro[j]->num);
attendi();
printf ("Adesso metto tutto in ordine\n");
t1=clock();
ordina (libro, i);
t2=clock();
tm=((float)(t2-t1))/(CLOCKS_PER_SEC);
printf("\ntempo di ordinamento: %f s\n",tm);

printf ("\n\nAdesso ristampo il libro\n\n");
attendi();

for (i=0;libro;i++)
printf ("%4d %-25s presente %d volte\n",i,libro->parola,libro->num);

return 0;
}





Però vorrei modificarlo in modo che mi stampi solo le 20 parole più usate e scrivere accanto quante volte sono presenti nel testo solo x qll 20 parole e in base a qnt volte compare far stampare a lato un determinato numero di cancelletti per esempio cosi:

ciao (2) ####
buongiorno (3) #####
salve (4) ######


come potrei modificare qll programma?
grazie ciao
 

Discussioni simili