Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di Poker1
    Registrato dal
    Jul 2002
    Messaggi
    479

    [C++] Ordinare un array di stringhe

    Ciao a tutti.

    Io ho questo problema:

    dato un array di stringe (puntatore a carattee)

    char* arr[10];

    e le stringhe disposte così:

    arr[0] = "Giulio";
    arr[i] = "Mario";
    ...
    ...
    arr[9] = "Giada";

    Come posso ordinarle alfabeticamente?

    Sono 2 giorni che ammattisco su questa cosa e non ho ancora trovato una soluzione..

    Grazie

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Non ti vorrei dire una cazzata, ma credo che tu potresti usare la funzione strcmp() che ti restituisce la differenza lessicografica fra le due stringhe passate come parametri. Se il risultato di tale funzione è minore di 0 la prima è lessicograficamente inferiore alla seconda, se è maggiore di zero è il contrario, se il risultato è uguale a 0 le due stringhe sono identiche. (la strcmp() viene, infatti, usata per confrontare due stringhe e restituisce 0 nel caso siano uguali).
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    esistono 2 tipi di ordinamento :
    uno Ascii l' altro alfabetico..
    ordinare secondo l'Ascii vuol dire che le maiuscole vengono prima..
    se vuoi maiuscole e minuscole compagne e ' un ordinamento di tipo
    alfabetico..
    oltre a le procedure predefinite in ascii puoi fare questo
    codice:
    for (i=0;i<max;i++)if (stringaA[i]<stringaB[i])printf("Stringa A<Stringa B");
    else printf("stringaB<stringaA");
    altrimenti devi convertirre le due stringhe tutte in minuscolo o tutte in maiuscolo!

  4. #4
    inoltre posso aggiungere che se hai un carattere p in maiuscolo per
    convertirlo in minuscolo puoi fare
    codice:
    if ((p<='Z')&&(p>='A'))p=p-'A'+'a';
    cioe' se il carattere e compreso tra A e Z(Cioe' e' maiuscolo)
    sottrai 'A' e somma 'a';
    sai che il carattere 'A' ha valore 65 'B' 66 ecc ora io sottraendo
    65 trovo la differenza di posizione tra A e il carattere in p;
    quindi se sommo 'a' trovo la lettera minuscola!

    per convertire in minuscolo idem
    codice:
    if((p<='z')&&(p>='a'))p=p-'a'+'A';

  5. #5
    Utente di HTML.it L'avatar di Poker1
    Registrato dal
    Jul 2002
    Messaggi
    479
    avevo già in mente di fare il confronto if(A[0] < A[1]) cout << "...";

    ma ho provato e non funziona. Non le confronta per la somma dei caratteri.

  6. #6
    Utente di HTML.it L'avatar di Poker1
    Registrato dal
    Jul 2002
    Messaggi
    479
    Ho risolto:

    guardate come ho fatto grazie a strcmp()

    Codice PHP:

    #include <iostream>

    void exchange(charA[], int xint y)
    {
       
    chartemp A[x];
       
    A[x] = A[y];

       
    A[y] = temp;
    }

    void main()
    {
       const 
    int N 10;
       
    chararra[N];

       
    arra[0] = "luca";
       
    arra[1] = "giuseppina";
       
    arra[2] = "mariella";
       
    arra[3] = "claudio";
       
    arra[4] = "enrico";
       
    arra[5] = "gesu";
       
    arra[6] = "francesco";
       
    arra[7] = "giovanni";
       
    arra[8] = "carlo";
       
    arra[9] = "maria";

      
    // cout << strcmp(arra[0], arra[1]);

       
    for(int i 0N; ++i)
       {
          for(
    int j N-1>= i+1j--)
             if(
    strcmp(arra[j-1], arra[j]) == 1exchange(arrajj-1);

       }

       for(
    int i 0N; ++i)
          
    cout << arra[i] << endl;

       
    char tcin >> t;


  7. #7
    Originariamente inviato da Poker1
    avevo già in mente di fare il confronto if(A[0] < A[1]) cout << "...";

    ma ho provato e non funziona. Non le confronta per la somma dei caratteri.
    carattere per carattere..
    il for lo fa' carattere per carattere..
    prova a scriverla cosi'
    codice:
    for (i=0;i<max;i++)if (stringa[A][i]<stringa[B][i])cout<<"Stringa A<Stringa B"
    else cout<<"stringaB<stringaA";
    con stringa a e stringa b intendevo prendi 2 stringhe alla volta..

  8. #8

    Soluzione alternativa usando STL

    codice:
    #include <algorithm>
    #include <iostream>
    #include <cstring>
    
    using namespace std;
    
    int cstr_compare(const char * const  a, const char * const  b)
    {
    	return strcmp(a, b) < 0;
    }
    
    int main()
    {
       const int array_size = 10;
       char * arra[array_size];
       arra[0] = "luca";
       arra[1] = "giuseppina";
       arra[2] = "mariella";
       arra[3] = "claudio";
       arra[4] = "enrico";
       arra[5] = "gesu";
       arra[6] = "francesco";
       arra[7] = "giovanni";
       arra[8] = "carlo";
       arra[9] = "maria";
    
       sort(arra, arra + array_size, cstr_compare);
    
       for(int i=0; i<array_size; ++i)
    	   cout << arra[i] <<endl;
    
       return 0;
    }

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.