PHP Code:
/*
*
* Qsort
*
* Require: compara_stringhe_c.o
*
*/
#include <st***.h>
#include <stdlib.h>
#include <string.h>
#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 compara_stringhe ( const void * a, const void * b){
char ** str1=(char **)a;
char ** str2=(char **)b;
return strcmp(*str1,*str2);
}
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;
}