Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di Gipple
    Registrato dal
    Mar 2009
    Messaggi
    41

    [C++] Ordinare alfabeticamente le stringhe all'interno di una struct?

    Ciao a tutti, sono ancora io a rompere con le mie domande sul c++ ... stavolta parliamo di strutture ...
    Allora io ho una struttura così fatta:
    codice:
    struct struttura
    {
    string a;
    int b;
    int c;
    int d;
    };
    Ora la struttura che ho descritto è generalizzata per far prima, ma sostanzialmente io ho bisogno di creare un array di strutture (cosa che ho già fatto) poi dividere i dati in 2 in base alla media degli int e successivamente visualizzare gli stessi dati in ordine alfabetico ...
    Il resto ho già in mente come farlo, ma come posso ordinare le stringhe in ordine alfabetico? (bubble sort magari, ma come faccio a capire che è una stringa alfabeticamente precede l'altra?)
    Grazie mille in anticipo a tutti, ciao!

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2012
    Messaggi
    2
    Ciao,
    puoi usare tranquillamente la funzione sort e mettere come terzo argomento una funzione che paragoni le string delle struct. Per quanto riguarda l'ordine una string è minore di un'altra quando viene prima nell'alfabeto ed è maggiore quando invece si trova dopo in ordine alfabetico. Spero di essere stato utile perché sto studiando C++ da autodidatta

    Distinti saluti

    Gae1995

  3. #3
    Utente di HTML.it L'avatar di Gipple
    Registrato dal
    Mar 2009
    Messaggi
    41
    Innanzitutto grazie per la risposta,
    Purtroppo non posso usare la funzione sort (sarebbe un esercizio a scopo didattico per un ragazzo a cui sto dando una mano, in quanto tale bisognerebbe creare l'algoritmo "a mano") inoltre il procedimento (a meno che non abbia sbagliato qualcosa) non sembra funzionare ... anzi addirittura se cerco (in qualunque modo) di confrontare le stringhe all'interno della struct in un qualsivoglia ciclo il compilatore sembra saltare "a piè pari" il controllo ...

  4. #4
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    Posta il codice che hai scritto fino ad ora. Trattandosi di un esercizio va più che bene un bubble sort, se non diversamente specificato.
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  5. #5
    Utente di HTML.it L'avatar di Gipple
    Registrato dal
    Mar 2009
    Messaggi
    41
    Infatti avevo usato quello Utilizzando comunque un'implementazione del BubbleSort che non conoscevo (trovata online) ora "sembra" ordinare tutto ... il problema è che quando vado a visualizzare gli elementi mi visualizza solo il primo e non capisco perchè
    Comunque ecco il codice (mancherebbe la parte della media ma quella è semplice).

    codice:
    #include <iostream>
    #include <string>
    #define MAX 100
    
    using namespace std;
    
    struct struttura
    {
    string a;
    int b;
    int c;
    int d;
    };
    
    struttura read() //Funzione che leggi i dati e li inserisce all'interno della struttura che a sua volta è contenuta nell'array
    {                //I valori di int devono essere compresi fra 1 e 10, mentre la stringa deve esssere una parola, per questo ho usato cin
           struttura st;
           cout << "Inserisci il valore della stringa: \n";
           cin >> st.a;
          do{
                cout << "Inserisci il primo intero: \n";
                cin >> st.b;} while(st.b<1 || st.b>10);
                do {cout << "Inserisci il secondo intero: \n";
                   cin >> st.c;} while(st.c <1 || st.c >10);
                       do {cout << "Inserisci il terzo intero: \n";
                           cin >> st.d;} while(st.d<1 || st.d>10);
          return st; 
           }
    
    void sortB(struttura a[], int n) {
     {
       int i, last;
       struttura tmp;
       int high=n;                        
     
       while (high >= 0)                  
         { 
             last = -1;                  
             for (i=0; i<high; i++)     
             {
               if (a[i].a>a[i+1].a)        
               { 
                 tmp = a[i]; 
                 a[i] = a[i+1]; 
                 a[i+1] = tmp;
                 last = i;            
               } 
             }
         high = last;               
         }                          
     }
         }
    
    void print(struttura *array,int length)
    {
        for(int i=0;i<length;i++){
            cout<<array[i].a<<endl;}
    }
    
    int main()
    {
        int n;
        cout << "Inserisici il numero di valori da utilizzare (massimo 100) ...\n";
        do{
            cin>>n;
          }while (n<=0 || n>MAX);
        struttura t[n];
        for(int i=0;i<n;i++){
                cout << "\nElemento " << i+1 << ":\n";
                t[i]=read();}
        sortB(t,n);
        print(t,n);
        return 0;
    }

  6. #6
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    Devi cambiare
    codice:
    int high=n;
    in
    codice:
    int high = n - 1;
    , inoltre, per rendere il codice portabile e conforme allo standard C++ dovresti cambiare la dichiarazione dell'array
    codice:
    struttura *t = new struttura[n];
    e alla fine, prima del return
    codice:
    delete[] t;
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

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 © 2024 vBulletin Solutions, Inc. All rights reserved.