main
main header
function
PHP Code:
/*
*
* Qsort
*
* Require: compara_stringhe_c.o
*
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "main_header.h" // prototypes
#define MAX_NUM "20" // numero cifre di input
#define MAX_INPUT_S "99" // lunghezza massima stringa input per vettore buffer
#define MAX_INPUT 100 // grande vettore buffer
int main (void) {
int n; // numero elementi
int i,j; // contatore di appoggio
char **vet_s; // base_address dei char *
char array [MAX_INPUT]; // buffer di chars
char * p_temp; // puntatore temp a char
///////////////////////////////////////////////// grandezza array
printf("Numero di stringhe da inserire\n");
scanf("%"MAX_NUM"d",&n);
for(;n<0;){
printf("Mi prendi in giro? Inserisci un numero intero positivo\n");
scanf("%"MAX_NUM"d",&n);
}
///////////////////////////////// inizio trattamento dati
if (n==0){
printf("Lei è un betatester pigro\n");
}else{
//////////////////////////// allocazioni spazio per gli n elementi
vet_s= (char **)malloc (n * sizeof(void *));
////////////////////////// verifica spazio sufficiente
if (vet_s == NULL) {
printf("Spazio disponibile non sufficiente per l'allocazione\n");
}else{
for (i=0;i<n;i++){
////////////////////////// input stringa
printf("Inserire la %d stringa :\n",i+1);
scanf("%" MAX_INPUT_S "s",array);
///////////////////////// conteggio stringa
for (j=0; (j!=MAX_INPUT) && (array[j]!=0) ;j++){
}
////////////////////////////verifica della presenza del tappo
if (j==MAX_INPUT){
printf ("La stringa in input non è formattata correttamente");
array[j-1]=0;
j--;
}
///////////////////////////////// alloco lo spazio per la stringa
p_temp = ( char *) malloc ((j+1) * sizeof(char *));
if( p_temp == NULL){
printf("Spazio disponibile non sufficiente per l'allocazione\n");
exit(-1);
}
/////////////////////////////// trasferisco i valori
for (j=0; array[j]!=0 ;j++){
*(p_temp + j) = array [j];
}
*(p_temp + j) = array [j]; // aggiungo il tappo
*(vet_s + i) = p_temp;
}
////////////// fine inserimento valori /////
////////////stampo stringhe inserite
printf ("\nStringhe inserite : \n\n");
for(i=0;i<n;i++){
printf ("%s\n",*(vet_s + i));
}
////sorting delle stringhe
qsort (vet_s, n , sizeof(void *) , compara_stringhe);
// stampa delle stringhe
printf ("\nStringhe ordinate : \n\n");
for(i=0;i<n;i++){
printf ("%s\n",*(vet_s + i));
/////////////////// libero le allocazioni delle singole stringhe
free(*(vet_s + i));
*(vet_s + i)=NULL;
}
//////////////////// libero l'allocazione degli n elementi
free(vet_s);
vet_s=NULL;
}
}
return 0;
}
PHP Code:
int compara_stringhe ( const void * a, const void * b);
PHP Code:
/*
*
* Funzione di comparazione stringhe
*
* Closed
*/
int compara_stringhe ( const void * a, const void * b){
char ** str1 = ( char **) a;
char ** str2 = ( char **) b;
int i , diff;
///////////////////////////////////// controllo le stringhe ed esco solo se trovo un tappo
for (i=0; *(*(str1) + i)!= 0 && *(*(str2) + i)!= 0 ;i++){
diff = *(*(str1) + i) - *(*(str2) + i);
if (diff != 0){
return diff;
}
}
///////////////////////////////////rieffettuo la differenza e restituisco
diff = *(*(str1) + i) - *(*(str2) + i);
return diff;
}