• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Sortowanie string'a

Object Storage Arubacloud
0 głosów
6,332 wizyt
pytanie zadane 3 września 2017 w C i C++ przez chucksqll Stary wyjadacz (12,930 p.)

Witam, próbuję napisać funkcję sortującą string'a(sortowanie babelkowe), ale niezbyt mi to wychodzi. To co napisałem nie daje w ogóle efektu. Dlaczego?

void sortowaniebabelkowe(string wyraz)
{

 for(int i=0;i<wyraz.length()-1;i++)
 {
     for(int j=0;j<wyraz.length()-1;j++)
     {
         if(int(wyraz[j])>int(wyraz[j+1]))
         {
             char x;
             x=wyraz[j+1];
             wyraz[j+1]=wyraz[j];
             wyraz[j+1]=x;
         }

     }

 }

}

 

3 odpowiedzi

+1 głos
odpowiedź 3 września 2017 przez Eryk Andrzejewski Mędrzec (164,260 p.)
void sortowaniebabelkowe(string wyraz)

Jaki chcesz mieć efekt, jeśli ta funkcja ani niczego nie zwraca, ani nie modyfikuje stringa, który jest jej parametrem? laugh

Popraw to na np.

std::string sortowaniebabelkowe(string wyraz)

(Wtedy będziesz musiał zwracać posortowanego stringa)

Lub:

void sortowaniebabelkowe(string& wyraz)

(Wtedy string będzie przekazywany przez referencję, więc będziesz go modyfikował)

komentarz 3 września 2017 przez chucksqll Stary wyjadacz (12,930 p.)

Ten fragment kodu nie modyfikuje go?

edit: & zadziałał, dzięki!

 

char x;
 x=wyraz[j+1];
 wyraz[j+1]=wyraz[j];
 wyraz[j]=x;

 

komentarz 3 września 2017 przez Eryk Andrzejewski Mędrzec (164,260 p.)
Jeżeli przekazujesz stringa w sposób "normalny", przez wartość, to tworzona jest jego kopia. Owszem, tym fragmentem kodu modyfikujesz, ale jego kopię. Jeśli chcesz pracować na oryginalnym stringu, musisz użyć referencji (lub wskaźnika).
0 głosów
odpowiedź 3 września 2017 przez mbabane Szeryf (79,280 p.)
char x;
 x=wyraz[j+1];
 wyraz[j+1]=wyraz[j];
 wyraz[j+1]=x;

Rozpisz sobie to na kartce, a zobaczysz

komentarz 3 września 2017 przez chucksqll Stary wyjadacz (12,930 p.)

Poprawiłem, ale chyba błędnie bo nadal nie ma efektu.

char x;
 x=wyraz[j+1];
 wyraz[j+1]=wyraz[j];
 wyraz[j]=x;

 

komentarz 3 września 2017 przez Partyjny Obywatel (1,170 p.)
Prześledź sobie ten kod

 

#include <iostream>
#include <string>

using namespace std;
int dlugosc;
string sortuj(string &napis)
{
    for(int i=0; i<dlugosc-1; i++)
    {
        for(int j=0; j<dlugosc-1; j++)
        {
            if(napis[j]>napis[j+1])
            {
                char x = napis[j];
                napis[j] = napis[j+1];
                napis[j+1] = x;
            }
            else
            {

            }
        }
    }
    return napis;

}

int main()
{
    cout<<"Podaj napis: ";
    string napis;
    cin>>napis;

    dlugosc = napis.length();
    string &referencja = napis;

    sortuj(referencja);

    cout<<endl<<napis;

    return 0;
}
komentarz 3 września 2017 przez mbabane Szeryf (79,280 p.)
Przenies to do bloku kodu (ikonka {...})
0 głosów
odpowiedź 3 września 2017 przez Velta Maniak (52,010 p.)
for(int i=0;i<wyraz.length()-1;i++)
 {
     for(int j=0;j<wyraz.length()-1;j++) if(int(wyraz[j])>int(wyraz[j+1])) swap(wyraz[j], wyraz[j + 1]);
 }

o wiele prościej ;)

Podobne pytania

0 głosów
1 odpowiedź 1,343 wizyt
0 głosów
1 odpowiedź 573 wizyt
pytanie zadane 19 stycznia 2019 w C i C++ przez Fizek78 Nowicjusz (170 p.)
0 głosów
2 odpowiedzi 235 wizyt

92,548 zapytań

141,390 odpowiedzi

319,509 komentarzy

61,932 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...