sorotowanie
Ostatnio zmodyfikowano 2017-04-11 20:28
Chowan Temat założony przez niniejszego użytkownika |
sorotowanie » 2017-04-11 14:20:51 Witam, mam pytanie. Dlaczego w kodzie do sortowanie musze użyć rozmiaru stringa -1 gdyż w przeciwnym razie gdy wyrzuca mi dane nie wyswietla ostatniego elementu. #include<iostream> #include<cstring> #include<cstdlib> using namespace std;
void sort_babel( string & tab ) { for( int i = 0; i < tab.size(); i++ ) { for( int j = 0; j < tab.size(); j++ ) { if( tab[ j ] > tab[ j + 1 ] ) swap( tab[ j ], tab[ j + 1 ] ); } } } int main() { string n; cout << "podaj ciag znakow: "; cin >> n; sort_babel( n ); cout << "posortowany zbior: " << n << endl; system( "pause" ); return 0; }
jak poprawie na tab.size()-1 to wyświetla mi cały string posortowany. pomimo ze sprawdzając rozmiar string przy wprowadzaniu i przed wypisaniem ma on taka sama długość w sensie sprawdzam po cin >> n dodaje cout << n.size() i dodaje to po tym jak funkcja kończy przetwarzać elementy i długość jest ta sama a wypisuje mi jeden element mniej. |
|
maly7 |
» 2017-04-11 14:47:43 for( int j = 0; j < tab.size() - 1; j++ ) { if( tab[ j ] > tab[ j + 1 ] ) ... Musi być tab.size()-1 ponieważ poniżej odwołujesz się do tab[ j + 1 ], więc w innym wypadku wykroczyłbyś poza zakres tablicy. Inaczej mógłbyś zrobić tak (zaczynając od 1) for( int j = 1; j < tab.size(); j++ ) { if( tab[ j - 1 ] > tab[ j ] ) ... |
|
Chowan Temat założony przez niniejszego użytkownika |
» 2017-04-11 17:56:27 Okej super dzięki. A możesz mi powiedziec dlaczego zamienia istniejący element z tablicy na ten z poza tablicy? Czy nie wiem jak to jest że on się nie wyświetla pomimo że string ma rozmiar taki jak powinien mieć. |
|
maly7 |
» 2017-04-11 18:44:11 Jeśli string np. str ma rozmiar 5, więc nie możesz się odwołać do elementu str[5], ponieważ taki element nie istnieje, maksymalny (piąty) to str[4]. Spróbuj sobie zrobić: cin >> n; swap( n[ n.size() - 1 ], n[ n.size() ] ); W najlepszym razie po wyświetleniu zniknie ostatni znak ze stringa (będzie tam prawdopodobnie 0). |
|
Chowan Temat założony przez niniejszego użytkownika |
» 2017-04-11 20:17:17 No i tak się właśnie dzieje ale nie rozumiałem dlaczego. Dzięki za info |
|
maly7 |
» 2017-04-11 20:28:07 Przede wszystkim nigdy nie wolno wykraczać poza zakres tabeli (bo i po co?). Ale to nie znaczy, że nic tam nie ma, w twoim wypadku znajduje się tam 0 więc twój znak, np. 'a' zamienia z 0 więc nic się nie wyświetla. Jeśli masz napis = "abcde"; i zamienisz napis[4] z napis[5], to na miejscu napis[4] pojawi się to co było na miejscu napis[5] i odwrotnie. Jeśli teraz napis[4] = np. 0 to coś tam jest (dlatego rozmiar napisu jest taki sam) ale się po prostu nie wyświetli. |
|
« 1 » |