Sortowanie alfabetyczne
Ostatnio zmodyfikowano 2018-01-14 18:50
fenoloftaleina Temat założony przez niniejszego użytkownika |
Sortowanie alfabetyczne » 2018-01-14 16:10:50 Cześć, mam problem z sortowaniem alfabetycznym po nazwisku danych zapisanych w strukturze. Mianowicie chodzi o to, że zamiast sortować od A-Z sortuje od Z-A. Poniżej kod: const int ilosc_kontaktow = 4; for( int i = 0; i < ilosc_kontaktow; i++ ) { if( kontakty[ i ].nazwisko[ 0 ] < kontakty[ i + 1 ].nazwisko[ 0 ] ) { numbers Tmp = kontakty[ i ]; kontakty[ i ] = kontakty[ i + 1 ]; kontakty[ i + 1 ] = Tmp; } cout << kontakty[ i ].imie << " "; cout << kontakty[ i ].nazwisko << " "; cout << kontakty[ i ].numer << endl; }
}
Zmiana tej lini: if (kontakty .nazwisko[0] < kontakty[i+1].nazwisko[0]) na if (kontakty .nazwisko[0] > kontakty[i+1].nazwisko[0]) powoduje, że program przestaje sortować alfabetycznie i w dodatku nie wyświetla ostatnich danych tylko 0. Męczę się z tym już któryś dzień i sam nie potrafię nic już wymyślić. Będę wdzięczny za wszelkiego rodzaju rozwiązanie lub wskazówki. |
|
nanoant20 |
» 2018-01-14 16:53:38 bardzo dużo do poprawienia od warunków if począwszy i jeżeli się nie mylę to powinny być dwie pętelki Piszę z palca więc nie jestem pewny do końca, ale mniej więcej to powinno iść tak. if( kontakty[ i ].nazwisko > kontakty[ j ].nazwisko ) { temp = kontakty[ i ].nazwisko; kontakty[ i ].nazwisko = kontakty[ j ].nazwisko; kontakty[ j ].nazwisko = temp; }
|
|
fenoloftaleina Temat założony przez niniejszego użytkownika |
» 2018-01-14 17:21:34 Poprawiłem: for( int j = 1, i = 0; j < ilosc_kontaktow; j++, i++ ) { if( kontakty[ i ].nazwisko[ 0 ] > kontakty[ j ].nazwisko[ 0 ] ) { string temp = kontakty[ i ].nazwisko; kontakty[ i ].nazwisko = kontakty[ j ].nazwisko; kontakty[ j ].nazwisko = temp; } cout << kontakty[ j ].nazwisko; }
Tylko teraz w ogóle nie sortuje. |
|
nanoant20 |
» 2018-01-14 17:49:07 napisałem Ci coś takiego #include <iostream> #include <string> #include <algorithm>
using namespace std; const int MAX = 3;
struct user { string nazwisko; int numer; };
int main() { user kontakty[ MAX ] = { { "Smith", 33 }, { "Nowak", 35 }, { "Kowalski", 1 }, }; cout << "Wyswietlam strukture user lokalnie" << endl; for( int i = 0; i < MAX; i++ ) { cout << "Nazwisko: " << kontakty[ i ].nazwisko; cout << " Nr: " << kontakty[ i ].numer << "\n"; } cout << endl << "Sortowanie po nazwisku" << endl; int j; string temp; for( int i = 0; i < MAX; i++ ) { for( j =( i + 1 ); j < MAX; j++ ) { if( kontakty[ i ].nazwisko > kontakty[ j ].nazwisko ) { temp = kontakty[ i ].nazwisko; kontakty[ i ].nazwisko = kontakty[ j ].nazwisko; kontakty[ j ].nazwisko = temp; } } cout << "Nazwisko: " << kontakty[ i ].nazwisko; cout << " Nr: " << kontakty[ i ].numer << "\n"; } cout << endl << endl; return 0; }
Przeanalizuj sobie |
|
fenoloftaleina Temat założony przez niniejszego użytkownika |
» 2018-01-14 18:07:10 Wielkie dzięki, sortowanie działa super. Jeszcze jeden szczególik. Chce wyświetlić po sortowaniu przy nazwisku odpowiednie imie i numer tel. Coś takiego: int j; string temp; for( int i = 0; i < ilosc_kontaktow; i++ ) { for( j =( i + 1 ); j < ilosc_kontaktow; j++ ) { if( kontakty[ i ].nazwisko > kontakty[ j ].nazwisko ) { temp = kontakty[ i ].nazwisko; kontakty[ i ].nazwisko = kontakty[ j ].nazwisko; kontakty[ j ].nazwisko = temp; } } cout << kontakty[ i ].imie << " "; cout << kontakty[ i ].nazwisko << " "; cout << kontakty[ i ].numer << endl;
wyświetla posortowane nazwiska, ale nie właściwie przypisane imię i numer tel |
|
nanoant20 |
» 2018-01-14 18:29:01 pytałeś jak sortować po nazwusku więc napisałem tak. ale to nie problem zamiast dodać jeszcze jeden warunek do if'a powiedzmy tak if( ( kontakty[ i ].nazwisko > kontakty[ j ].nazwisko ) || ( kontakty[ i ].numer > kontakty[ j + 1 ].numer ) )
posortować strukture temp = kontakty[ i ]; kontakty[ i ] = kontakty[ j ]; kontakty[ j ] = temp;
i na końcu wyswietlić strukture |
|
fenoloftaleina Temat założony przez niniejszego użytkownika |
» 2018-01-14 18:50:05 Rzeczywiście, może nie do końca jasno sie określiłem, ale myślałem, że z wypisanie na końcu już dam sobie rade. Tak czy inaczej, po zastosowaniu sie do wskazówek działa jak należy. Dzięki za pomoc :) |
|
« 1 » |