Visualizzazione dei risultati da 1 a 7 su 7

Visualizzazione discussione

  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2015
    Messaggi
    11

    [C] Ordinamento alfabetico di stringhe

    Salve, sto lavorando ad un programma che, una volta inseriti i dati di tot. clienti(cognome,nome,via), stampi a video i dati dei clienti caricati ma in ordine alfabetico. Ho svolto l'esercizio nel seguente modo, ma non funziona:

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define MAX 100
    #define M 50
    typedef struct{
        char cognome[M];
        char nome[M];
        char via[M];
        }cliente;
    int caricaDati(cliente[]);
    void scambia(cliente[],char[],int);
    void ordinaClienti(cliente[],int);
    int main () {
        cliente ElencoClienti[MAX];
        int n_clienti=caricaDati(ElencoClienti);
        printf("Totale clienti caricati:%d \n", n_clienti);
        ordinaClienti(ElencoClienti,n_clienti);
        }
    int caricaDati(cliente ElencoClienti[]){
        int i,n,tot=0;
        printf("Quanti clienti vuoi caricare? \n");
        scanf("%d", &n);
    
    
    for(i=0; i<n; i++){
        printf("Cliente %d: \n", i+1);
        printf("Cognome: \n");
        scanf("%s", ElencoClienti[i].cognome);
        printf("Nome: \n");
        scanf("%s", ElencoClienti[i].nome);
        printf("Via: \n");
        scanf("%s", ElencoClienti[i].via);
        tot++;
    }
    return tot;
    }
    void scambia(cliente ElencoClienti[],char c[], int n){
        int i,j;
        cliente copiaElencoClienti[MAX];
        for(i=0; i<n; i++){
            for(j=0; j<n; j++){
                if(strcmp(c,copiaElencoClienti[i].cognome)==0){
                char *temp;
                temp=(char*)malloc(n*sizeof(char));
                strcpy(temp,ElencoClienti[i].cognome);
                strcpy(copiaElencoClienti[i].cognome,copiaElencoClienti[j].cognome);
                strcpy(copiaElencoClienti[j].cognome,temp);
                }
                if(strcmp(c,copiaElencoClienti[i].nome)==0){
                char *temp;
                temp=(char*)malloc(n*sizeof(char));
                strcpy(temp,copiaElencoClienti[i].nome);
                strcpy(copiaElencoClienti[i].nome,copiaElencoClienti[j].nome);
                strcpy(copiaElencoClienti[j].nome,temp);
                }
    
    
                if(strcmp(c,copiaElencoClienti[i].via)==0){
                char *temp;
                temp=(char*)malloc(n*sizeof(char));
                strcpy(temp,ElencoClienti[i].via);
                strcpy(copiaElencoClienti[i].via,copiaElencoClienti[j].via);
                strcpy(copiaElencoClienti[j].via,temp);
                }
                }
    
    
        }
    
    
    
    
    }
    void ordinaClienti(cliente ElencoClienti[], int n){
    cliente copiaElencoClienti[MAX];
    char cognomiordinati[M], nomiordinati[M], vieordinate[M];
        int k;
        for(k=0; k<n; k++){
            strcpy(copiaElencoClienti[k].cognome,ElencoClienti[k].cognome);
            cognomiordinati[k]=copiaElencoClienti[k].cognome;
            strcpy(copiaElencoClienti[k].nome,ElencoClienti[k].nome);
            nomiordinati[k]=copiaElencoClienti[k].nome;
            strcpy(copiaElencoClienti[k].via,ElencoClienti[k].via);
            vieordinate[k]=copiaElencoClienti[k].via;
        }
    int alto;
    int i;
    for(alto=n-1; alto>0; alto--){
        for(i=0; i<alto; i++){
            if(strcmp(ElencoClienti[i].cognome,ElencoClienti[i+1].cognome)>0){
                scambia(ElencoClienti,cognomiordinati,n);
                scambia(ElencoClienti,nomiordinati,n);
                scambia(ElencoClienti,vieordinate,n);
        }
    }
    
    
    for(i=0; i<n; i++){
        printf("Cognome:%s Nome:%s Via:%s \n",
        ElencoClienti[i].cognome,ElencoClienti[i].nome,ElencoClienti[i].via);
    }
    }
    }
    Ultima modifica di LeleFT; 15-02-2016 a 13:46 Motivo: Aggiunti i tag CODE

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.