Muszę posortować listę stringów w formacie gg:mm (0-24h). Zupełnie nie wiem jak się do tego zabrać. Jakieś pomysły torgi?
Jak porównać wybrany element listy z następnym?
Wersja do druku
Muszę posortować listę stringów w formacie gg:mm (0-24h). Zupełnie nie wiem jak się do tego zabrać. Jakieś pomysły torgi?
Jak porównać wybrany element listy z następnym?
napisz sobie funkcję, która porównuje dwa stringi i zwraca 1 gdy pierwszy jest większy, 0 gdy są równe i -1 gdy drugi jest większy. potem napisz sobie jakieś proste sortowanie, np. bąbelkowe.
przy założeniu, że długość argumentów zawsze jest taka sama, to funkcja może wyglądać mniej więcej tak:
Kod:int compare(string s1, string s2)
{
for(int i = 0; i < s1.length(); i ++)
{
if(s1[i] != s2[i]) return s1[i] > s2[i] ? 1 : -1;
}
return 0;
}
No tylko bierz pod uwagę, że jak będziesz porównywał stringi to możesz dostać kolejność 1,10,11,12,13,14,...,2,20,21,22,23,24.
Mam coś takiego, ale nie wychodzi z pętli
Kod:int zamiana;
wsk = head;
do
{
zamiana = 0;
while (wsk != NULL)//nie wychodzi z tej petli
{
if (compare(wsk->get_godzina_odjazdu(), wsk->nast->get_godzina_odjazdu()))
{
zamiana = zamiana + 1;
schowek = wsk;
wsk = wsk->nast;
wsk->nast = schowek;
}
}
} while (zamiana != 0);
napisał gg:mm, co oznacza, że godzinę pięć po szóstej zapisuje jako 06:05, więc nie ma problemu.
@up
http://puu.sh/i08IZ/4358c67669.png
@Rzulf ;
no i co się dzieje jak porównasz i wyjdzie zero? nie przesuwasz wskaźnika i znowu porównujesz te same wartości.
narysuj sobie na kartce jak to ma działać a potem to napisz.
do tego jakbyś już doszedł do ostatniego elementu, to porównujesz go z nullem.
Za pierwszym razem normalnie przechodzi przez pętle, potem nie wchodzi w warunek. Nie mam pojęcia co jest źle.Kod:do
{
zamiana = 0;
wsk = head;
while (wsk->nast != NULL)
{
if (compare(wsk->get_godzina_odjazdu(), wsk->nast->get_godzina_odjazdu()))
{
zamiana++;
temp = wsk->nast;
wsk->nast = wsk;
wsk = temp;
}
wsk = wsk->nast;
}
} while (zamiana != 0);
Zrob z tego stringa "hh:mm" klase, zdefiniuj operator < i uzyj http://en.cppreference.com/w/cpp/algorithm/sort.
Ideone: http://ideone.com/90jgWxKod:#include <iostream>
#include <vector>
#include <algorithm>
class Foo
{
public:
Foo(std::string&& str_) :
str(std::move(str_))
{}
bool operator<(const Foo& other) const
{
// to sobie dopisz
// np.: godzian * 60 + minuty, i to porownaj do other.
return str < other.str;
}
std::string getString()
{
return str;
}
private:
std::string str;
};
int main() {
std::vector<Foo> v;
v.push_back(Foo("2"));
v.push_back(Foo("3"));
v.push_back(Foo("1"));
std::sort(v.begin(), v.end());
for (auto x : v)
std::cout << x.getString() << std::endl;
return 0;
}
W końcu zrobiłem na wskaźnikach bo nie chciałem całego kodu przepisywać na wektory. Dzięki za chęci i podsunięcie paru pomysłów.