Announcement

Collapse
No announcement yet.

Qsort - Array Dinamico - Error Control

Collapse
This is a sticky topic.
X
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Qsort - Array Dinamico - Error Control

    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 (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]!=;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_ssizeof(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;

    | VFX Artist, C++ Programmer, HW Overclocker | Web: xgiovio.com Email: xgiovio@gmail.com Twitter: @xgiovio
Working...
X

Google Profile


My name is Giovanni Di Grezia, but people call me xgiovio.

Here is my homepage:.

I'm a VFX Artist and Software Developer.

Giovanni Di Grezia