Ordinamento alfabetico di un nome

di Anonimizzato24182 il
22 risposte
Salve ho difficoltà nel ordinare in ordine alfavetico un nome vi spiego ho uno struct data contente dei nomi devo ordinare in ordine alfabetico ogni singolo nome ovvero tipo marco lo dovrei far riuscire a stampare come acmor il problema una volta impostato un bubble sort il nome mi viene stampato sempre uguale allo stato di partenza come potrei fare?

22 Risposte

  • Guarda il mio post sul void c'è una parte di programma che si occupa di questo ma non riesco ad eliminare i nomi uguali tu lo sai fare?
  • ...ogni carattere corrisponde ad un numero nel codice ASCII......
  • Ma esiste un codice da controllare?
  • vinci998 ha scritto:


    Salve ho difficoltà nel ordinare in ordine alfavetico un nome vi spiego ho uno struct data contente dei nomi devo ordinare in ordine alfabetico ogni singolo nome ovvero tipo marco lo dovrei far riuscire a stampare come acmor il problema una volta impostato un bubble sort il nome mi viene stampato sempre uguale allo stato di partenza come potrei fare?
    Se hai fatto qualcosa tipo char * nome = "Marco"; devi sapere che la stringa è inserita in una zona di memoria a sola lettura...se applichi cambiamenti ad essa quando ti va bene crasha tutto così ti accorgi dell'errore....quando ti va male il programma fila liscio ma non vedi cambiamenti nella stringa.

    Comunque è solo una ipotesi, se non posti il codice come possiamo aiutarti?
  • //questa è una prova con uno struct con un solo nome


    #include<iostream>
    #include<fstream>
    #define lung.nom 5
    using namespace std;
    typedef struct nominativi{
    char nome[100];
    }data;
    int main(){
    data nominativi[100];
    int i;
    cout<<"Inserisci un nome: "<<endl;
    cin>>nominativi.nome;
    //stampa nomi inseriti
    cout<<""<<nominativi.nome;
    char *temp;
    temp=new char[100];
    //vorrei usare questo bubble sort
    //considerando che la lunghezza del nome è di 5
    for(i=0;i<4;i++){
    if(nominativi.nome>nominativi[i+1].nome){
    temp=nominativi.nome;
    nominativi.nome=nominativi[i+1].nome;
    nominativi[i+1].nome=temp;
    }
    }
    for(int i=0;i<5;i++){
    cout<<nominativi.nome<<"";
    }}
  • Usa i tag CODE per il codice sul forum ... Comunque hai fatto un bel po' di confusione ...

    In lung.nom non puoi usare il .

    Se provi con 5 nominativi li devi inserire tutti e 5 e i deve partire da 0 ...

    Le copie di stringhe non le puoi fare con = ma devi usare la funzione strcpy ...
  • Si ho fatto anche con le funzioni strcpy e strcmp il confronto inziale ma non va mi ristampa il nome normalmente
  • Io usai questo per ordinare il file in ordine alfabetico ed è tutto funzionante ora ho un problema simile sempre da file devo prendere questi nomi ma invece di ordinare in ordine alfabetico l'elenco dei nomi devo oridnare ogni singolo nome in ordine alfabetico

    #include<iostream>
    #include<fstream>
    #include<string.h>
    using namespace std;
    typedef struct vita{
    char nome[100];
    int numero;
    }data;
    void carica_vettore(fstream&miofile,data v[]);
    void stampa_vettore(data v[]);
    void controlla_ordine(data v[]);
    int main(){
    char nome_file[20];
    data mare[200];
    data vita[200];
    fstream miofile;
    cout<<"Inserisci il file da aprire: "<<endl;
    cin>>nome_file;
    miofile.open(nome_file,ios::in);
    if(!miofile){
    cout<<"Il file che si desidera non puo' essere aperto"<<endl;
    exit(1);
    }
    carica_vettore(miofile,vita);
    stampa_vettore(vita);
    controlla_ordine(vita);
    }
    void carica_vettore(fstream&miofile,struct vita v[]){
    while(!miofile.eof()){
    int i=0;
    for(i=0;i<4;i++){
    miofile>>v.nome;
    miofile>>v.numero;
    }}miofile.close();}
    void stampa_vettore(struct vita v[]){
    int i=0;
    for(i=0;i<4;i++){
    cout<<v.nome<<" "<<endl;
    cout<<v.numero<<" "<<endl;}
    }
    void controlla_ordine(struct vita v[],struct mare t[]){
    char temp[100];
    int i;
    for(int i=0;i<3;i++){
    if(strcmp(v.nome,v[i+1].nome)>0){
    cout<<"Il file non e' ordinato alfabeticamente"<<endl;
    strcpy(temp,v.nome);
    strcpy(v.nome,v[i+1].nome);
    strcpy(v[i+1].nome,temp);}}
    cout<<"Il file ordinato alfabeticamente e': "<<endl;
    for(int i=0;i<4;i++){
    cout<<v.nome<<" "<<endl;
    }}
  • Usa i tag CODE !
  • //file testo con un solo nome
    #include<fstream>
    #include<string.h>
    #include<iostream>
    using namespace std;
    typedef struct nominativi{
    char nome[100];
    }data;
    int main(){
    int i;
    data nominativi[100];
    fstream miofile;
    miofile.open("nomi1.txt");
    miofile>>nominativi.nome;
    miofile.close();
    cout<<"Mostra il nome preso da file"<<endl;
    cout<<nominativi.nome<<" ";
    char temp[100];
    int n=5;
    //n=lunghezza nome contenuto nel file
    for(i=0;i<n-1;i++){
    if(strcmp(nominativi.nome,nominativi[i+1].nome)>0){
    strcpy(temp,nominativi.nome);
    strcpy(nominativi.nome,nominativi[i+1].nome);
    strcpy(nominativi[i+1].nome,temp);
    }}
    //stampa del nome ordinato in ordine alfabetico
    for(i=0;i<5;i++){
    cout<<nominativi.nome<<"";
    }}
    il problema è che non mi ordina il nome con questo bubble sort ma lo stampa uguale al nome di partenza come posso fare;?
  • Usa i tag CODE per favore.
  • Penso di non aver capito proprio cosa sono
  • Usa il pulsante Code
  • Mi puoi fare un esempio applicato al ultimo codice che ho mandato?
Devi accedere o registrarti per scrivere nel forum
22 risposte