PHP Code:
/*
*
*
* input:parole
* output: lista ordinata per nome senza ripetizioni + conteggio ripetizioni
*
*
*/
#include <st***.h>
#include <stdlib.h>
#include <string.h>
#define WORD_SIZE 100
typedef struct string {
char * word;
unsigned int counter;
struct string * next;
} word_struct;
word_struct * new_word_struct ( char * input_word , unsigned int input_counter );
word_struct * add_to_word_struct_list (word_struct * node, word_struct * list );
void convert_lower_case (char * buffer, int k);
//////////////////////////////////////////////////////////////////////////////////////////////////begin
int main (void ) {
char a;
char buff[WORD_SIZE]; // buf temporaneo per le parole da input
int i;
word_struct * list_word_struct = NULL ; // Lista vuota di tipo word_struct
word_struct * temp_word_struct; // Node temporaneo di tipo word_struct
a=fgetc(stdin);
for (; a!=EOF ; a=fgetc(stdin) ){
///////////////////////////////////////////////////////////////// parole nel buff
for (i=0 ; a!= ' ' && a!= '\n' && a!= '\t' ; i++){
buff[i]=a;
a=fgetc(stdin);
}
buff[i]=0;
convert_lower_case (buff,i);
if (buff[0] != 0){
temp_word_struct = new_word_struct (buff,1); // nuovo elemento di tipo word_struct
list_word_struct = add_to_word_struct_list (temp_word_struct, list_word_struct ); // aggiunta di un elemento word_struct a lista word_struct
}
}
///////////////////////////////////////////////////////////////////////////// stampa parole e numero inserimenti
printf ("\nParole Inserite e ripetizioni :\n");
for (temp_word_struct = list_word_struct ; temp_word_struct != NULL; temp_word_struct = (*temp_word_struct).next){
printf("%s , %u\n",(*temp_word_struct).word,(*temp_word_struct).counter);
}
return 0;
}
///////////////////////////////////////////////////////////////////////////////// functions
/////////////////////////////////////////////////////////////////////convert to lowercase
void convert_lower_case (char * buffer, int k){
int i;
for (i=0;i<k;i++){
if (buffer[i] >= 'A' && buffer[i] <= 'Z'){
buffer[i] = buffer[i] + ('a'-'A');
}
}
}
//////////////////////////////////////////////////////////////////// new node
word_struct * new_word_struct ( char * input_word , unsigned int input_counter ){
word_struct * pointer;
pointer = ( word_struct * ) malloc ( sizeof(word_struct));
(*pointer).word = strdup(input_word);
(*pointer).counter = input_counter;
(*pointer).next = NULL;
return pointer;
}
///////////////////////////////////////////////////////////////////////////////// insert node
word_struct * add_to_word_struct_list (word_struct * node, word_struct * list ){
//////////////////////////////////// I caso : Lista Nulla
if (list == NULL){
return node;
}
//////////////////////////////////// II caso : Inserimento in testa
if (strcmp((*node).word,(*list).word) <0){
(*node).next = list ;
return node;
}
if (strcmp((*node).word,(*list).word)==0){
(*list).counter += 1;
free((*node).word);
return list;
}
//////////////////////////////////////III caso Inserimento nel mezzo
(*list).next = add_to_word_struct_list (node, (*list).next );
return list;
}
Comment