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

Quicksort string

VPS Starter Arubacloud
+1 głos
471 wizyt
pytanie zadane 27 sierpnia 2021 w C i C++ przez n0sk1llexe Początkujący (300 p.)

Witam, próbuję rozwiązać zadanie z polskiego spoja Zliczacz liter. Chcąc posortować tablicę wejściowa zdecydowałem się użyć algorytmu quicksort z 14tego odcinku kursu. Zamieniłem tablicę intów na string przez co w linii wywołania funkcji otrzymuje następujący błąd

"error: cannot convert 'std::__cxx11::string {aka std::__cxx11::basic_string<char>}' to 'std::__cxx11::string* {aka std::__cxx11::basic_string<char>*}' for argument '1' to 'void quicksort(std::__cxx11::string*, int, int)'|"

Pomimo przeszukania podobnych tematów z błędem dalej nie bardzo wiem jak ugryźć ten problem, a czas ucieka stąd też moja prośba o pomoc i delikatne naprowadzenie na rozwiązanie. 

void quicksort(string *tablica, int lewy, int prawy)
{
    string v = tablica[(lewy+prawy)/2];
    string bufor;
    int i,j;
    i=lewy;
    j=prawy;
    do
    {
        while (tablica[i]<v) i++;
        while (tablica[j]>v) j--;
        if (i<=j)
        {
            bufor = tablica[i];
            tablica[i]=tablica[j];
            tablica[j]=bufor;
            i++;
            j--;
        }
    }
    while (i<=j);
    if (j>lewy) quicksort(tablica,lewy, j);
    if (i<prawy) quicksort(tablica, i, prawy);
}

int main()
{
    int testy;
    string wejscie;
    cin >> testy;
    cin.ignore();
    string toSort;
    int dlugosc;
    for (int i = 0; i <= testy; i++)
    {
        getline(cin, wejscie);
        toSort = toSort + spaceDelete(wejscie);
        cout << toSort << endl;
    }
    dlugosc = toSort.length();
    string aftersort;
    aftersort = quicksort(*toSort, 0, dlugosc-1); //tutaj sie pojawia blad
    return 0;
}

 

 

komentarz 27 sierpnia 2021 przez wojtek_suchy Mądrala (6,880 p.)
zmiast string, użyj tablicy char
komentarz 27 sierpnia 2021 przez manjaro Nałogowiec (37,390 p.)

@n0sk1llexe, Przeredaguj tak program aby nie trzeba było sortować, będzie lepszy czas i mniej roboty.

1 odpowiedź

+1 głos
odpowiedź 27 sierpnia 2021 przez tkz Nałogowiec (42,000 p.)
wybrane 27 sierpnia 2021 przez n0sk1llexe
 
Najlepsza
#include <iostream>
#include <string>

int main()
{
const auto size =256;
int tab[size]={0};
std::string str("Lorem ipsum dolor sit amet enim. Etiam ullamcorper. Suspendisse a pellentesque dui, non felis. Maecenas malesuada elit lectus felis, malesuada ultricies. Curabitur et ligula. Ut molestie a, ultricies porta urna. Vestibulum commodo volutpat a, convallis ac, laoreet enim. Phasellus fermentum in, dolor. Pellentesque facilisis. Nulla imperdiet sit amet magna. Vestibulum dapibus, mauris nec malesuada fames ac turpis velit, rhoncus eu, luctus et interdum adipiscing wisi. Aliquam erat ac ipsum. Integer aliquam purus. Quisque lorem tortor fringilla sed, vestibulum id, eleifend justo vel bibendum sapien massa ac turpis faucibus orci luctus non, consectetuer lobortis quis, varius in, purus. Integer ultrices posuere cubilia Curae, Nulla ipsum dolor lacus, suscipit adipiscing. Cum sociis natoque penatibus et ultrices volutpat. Nullam wisi ultricies a, gravida vitae, dapibus risus ante sodales lectus blandit eu, tempor diam pede cursus vitae, ultricies eu, faucibus quis, porttitor eros cursus lectus, pellentesque eget, bibendum a, gravida ullamcorper quam. Nullam viverra consectetuer. Quisque cursus et, porttitor risus. Aliquam sem. In hendrerit nulla quam nunc, accumsan congue. Lorem ipsum primis in nibh vel risus. Sed vel lectus. Ut sagittis, ipsum dolor quam.");
for(const auto&i:str)
{
    tab[int(i)]++;
}
for(auto i=0;i<size;++i)
{
    if(tab[i]!=0)
    {
        std::cout<<char(i)<<' '<<tab[i]<<std::endl;
    }
}
}

Nie ma znaczenia, czy użyjesz stringa, czy chara. Obie rzeczy w gruncie rzeczy są tym samym. Rada z sortowaniem jest połowicznie prawdziwa. Będzie szybciej, ale czy mniej roboty... Możesz rzucić okiem jeszcze na std::map, podobny schemat. 

Podobne pytania

0 głosów
1 odpowiedź 356 wizyt
pytanie zadane 24 czerwca 2020 w C i C++ przez dernis Nowicjusz (120 p.)
0 głosów
2 odpowiedzi 558 wizyt
pytanie zadane 2 października 2018 w SPOJ przez krawiecki Początkujący (490 p.)
0 głosów
1 odpowiedź 1,518 wizyt
pytanie zadane 29 lipca 2016 w C i C++ przez KiTroN Początkujący (300 p.)

92,455 zapytań

141,263 odpowiedzi

319,099 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...