|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Junior Member
Iscritto dal: Nov 2007
Messaggi: 2
|
Alternativa Esercizio??
Per chi è tanto paziente da elaborare un'alternativa a questo esercizio:
#include <stdio.h> #include <ctype.h> #include <string.h> #include <stdlib.h> char* inputStr() { unsigned long long i = 0; char c; char* str = (char*)malloc(2); do { c = getchar(); str[i++] = c; str = (char*)realloc(str, i+3); if (c == '\n') {str[--i] = ' '; str[i+1] = '\0';} } while(c != '\n'); return str; } void str_assign(char** s1, unsigned long r, char* s2) { unsigned long i; for(i = 0; s2[i] != '\0'; i++); char* s3 = (char*)malloc(i+1); for(i = 0; s2[i] != '\0'; i++) s3[i] = s2[i]; s3[i] = '\0'; s1[r] = s3; } void print(char** a, unsigned long end) { unsigned long i; for(i = 0; i <= end; i++) printf("%lu) %s\n", i, a[i]); } void print2(unsigned long* a, unsigned long end) { unsigned long i; for(i = 0; i <= end; i++) printf("%lu) %lu\n", i, a[i]); } unsigned long conta_parole(char* testo, char** parole, unsigned long* occorrenze) { unsigned long l, j, i = 0, tot_parole = 0; int isparola = 0, gia_inserita = 0; char* parola = (char*)malloc(2); for(l = 0; testo[l] != '\0'; l++) { if ( !(isspace(testo[l])) && !(ispunct(testo[l])) ) { parola[i++] = testo[l]; parola = (char*)realloc(parola, i+2); isparola = 1; } else if (isparola == 1) { isparola = 0; parola[i] = '\0'; if (tot_parole >= 1) { for(j = 0; j < tot_parole; j++) { if(strcmp(parole[j], parola)==0) {occorrenze[j]++; gia_inserita = 1;} } if (!gia_inserita) { str_assign(parole, tot_parole, parola); occorrenze[tot_parole]++; tot_parole++; parole = (char**)realloc(parole, (tot_parole+1)*sizeof(char*)); occorrenze = (unsigned long*)realloc(occorrenze, (tot_parole+1)*sizeof(unsigned long)); occorrenze[tot_parole] = 0; } else gia_inserita = 0; } else { str_assign(parole, 0, parola); occorrenze[0]++; tot_parole++; } i = 0; } } return tot_parole-1; } void ordina_parole(char** parole, unsigned long* occorrenze, unsigned long tot) { //bubble sort unsigned long i, scambi = 0; do { for(i = 0, scambi = 0; i < tot-1; i++) { if (occorrenze[i] < occorrenze[i+1]) { unsigned long appoggio1 = occorrenze[i]; occorrenze[i] = occorrenze[i+1]; occorrenze[i+1] = appoggio1; char* appoggio2 = parole[i]; parole[i] = parole[i+1]; parole[i+1] = appoggio2; scambi = 1; } } } while(scambi); for(i = 0; i < tot; i++) { printf("%s %lu\n", parole[i], occorrenze[i]); } } int main() { char* testo = inputStr(); char** parole = (char**)malloc(sizeof(char*)); unsigned long* occorrenze = (unsigned long*)malloc(sizeof(unsigned long)*50); occorrenze[0] = 0; unsigned long tot = conta_parole(testo, parole, occorrenze); //print2(occorrenze, tot);printf("\n"); //print(parole, tot);printf("\n"); ordina_parole(parole, occorrenze, tot); } |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Sep 2007
Messaggi: 754
|
![]()
__________________
http://www.tevigroup.it/ |
![]() |
![]() |
![]() |
#3 | |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2774
|
Quote:
Le regole d'oro del forum: 1- Usa i tag CODE 2- Indenta il codice 3- Non chiedere di fare i compiti al posto tuo e se devi farlo almeno inventa qualche bella scusa che ci faccia ridere come fanno tutti ![]() 4- Porgi chiaramente la tua richiesta. Nel tuo caso... perché dovrei leggere e soprattutto sforzarmi di capire quel codice (che tra l'altro non è neanche commentato) quando molto più semplicemente potresti spiegarci tu di che si tratta? 5- Benvenuto! ![]() |
|
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Sep 2007
Messaggi: 754
|
O meglio non credere che siamo dei brufolosi e occhialuti programmatori che si eccitano a vedere un listato c e che non hanno niente di meglio da fare che farti i compitini.
__________________
http://www.tevigroup.it/ |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 17:49.