Cześć, otrzymałem zadanie na stworzenie programu który przechowywał by w dynamicznej tablicy czasy z biegu w formacie GGSS
Niestety nie wiem jak zabrać się na zmienną czasu w jakim formacie powinna ona być żeby można było na niej potem wykonywać operacje np. wyciągnięcie najszybszego wyniku.
Jakieś podpowiedzi? Z góry dziękuje. :)
http://en.cppreference.com/w/cpp/chrono
Tutaj masz bibliotekę od czasu.
np. wyciągnięcie najszybszego wyniku.
Co to znaczy?
Dla ułatwienia treść zadania:
Wczytaj od użytkownika liczbę n. Zadeklaruj dynamiczną tablicę, w której przechowasz dane z wynikami czasu. Formacie GGSS, gdzie GG - to ilość godzin, MM - ilość minut, SS - ilość sekund. Wyświetl najkrótszy czas na ekranie.
Przykładowe dane wejściowe: 4
1001
0305
0401
0309
Oczekiwane wyjście:
0305
Spróbuje skorzystać z waszych propozycji, mam nadzieje że się uda.
Przy okazji, mam nadzieję, że wykładowca przez "dynamiczną tablicę" rozumie std::vector
.
A tak swoją drogą, to patrząc na warunki zadania to nie wiem, czy nie łatwiej by było zastosować strukturę/tuple 3 intów zamiast parsować czas do typów z chrono, a następnie je formatować.
kq napisał(a):
Przy okazji, mam nadzieję, że wykładowca przez "dynamiczną tablicę" rozumie
std::vector
.A tak swoją drogą, to patrząc na warunki zadania to nie wiem, czy nie łatwiej by było zastosować strukturę/tuple 3 intów zamiast parsować czas do typów z chrono, a następnie je formatować.
Tylko jak w intach zapisać czas w podanym formacie?
Wczytujesz 3 inty, do jakiegoś tupla albo struktury
struct dur
{
int g;
int m;
int s;
};
bool operator<(dur const& l, dur const& r)
{
return std::tie(l.g, l.m, l.s) < std::tie(r.g, r.m, r.s);
}
Teraz sortowanie i wypisywanie jest trywialne.
Oj.. .najciemniej pod latarnią. W zasadzie polecenie jest tak skonstruowane że wystarczy zadbać o format string'a z czasem ( GGSS ) i sortować kontener ze .... string'ami :) To wystarczy by znaleźć najniższy czas :) Obsługa samego czasu (chrono, ctime itp... ) nie jest potrzebna. Tylko ew. nad sprawdzeniem formatu np. w regexp bym się zastanowił.
Mokrowski napisał(a):
Oj.. .najciemniej pod latarnią. W zasadzie polecenie jest tak skonstruowane że wystarczy zadbać o format string'a z czasem ( GGSS ) i sortować kontener ze .... string'ami :) To wystarczy by znaleźć najniższy czas :) Obsługa samego czasu (chrono, ctime itp... ) nie jest potrzebna. Tylko ew. nad sprawdzeniem formatu np. w regexp bym się zastanowił.
Udało mi się stworzyć ten kontener i ładnie dane się dodają do tablicy.
Niestety nie wiem jak sortować te stringi, znalazłem inny wątek : https://4programmers.net/Forum/C_i_C++/242902-porownywanie_liczb_c++, ale nie wiem jak go zastosować do moich potrzeb, jakieś porady?
Dziękuje wszystkim za dotychczasową pomoc.
http://en.cppreference.com/w/cpp/string/basic_string/operator_cmp
std::string first = "10:01:01";
std::string second = "03:59:05";
std::cout << (first < second) << '\n'; // false
Jedyny problem tu jest taki, że liczby muszą być konkretnie 2-cyfrowe.
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main() {
int t_elements;
string x;
string temp="0";
cout<<"Podaj ilosc elementow tablicy:";
cin>>t_elements;
vector <string> tab;
tab.resize(t_elements);
cout<<"Wprowadz czasy z maratonu:\n";
for (int i=1; i<=t_elements; i++)
{
cin>>x;
tab.push_back(x);
}
for (int i=1; i<=tab.size(); i++)
{
//cout<<tab[i]<<"\n";
if (tab[i]<tab[i+1])
temp = tab[i];
cout << temp;
}
return 0;
}
Jest prawie idealnie, niestety w wyniku podaje mi prawidłowy wynik dwa razy i dwa zera na początku - próbowałem przenieść cout'a poza pętle ale wtedy nic nie wyświetla.
Macie jakieś pomysły?
for (int i=1; i<=tab.size(); i++)
{
//cout<<tab[i]<<"\n";
if (tab[i]<tab[i+1])
temp = tab[i];
cout << temp;
}
W tym fragmencie masz out_of_range
.
Tablica ma indeksy od 0
do size - 1
.
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main() {
int t_elements;
cout << "Podaj ilosc elementow tablicy:";
cin >> t_elements;
vector <string> tab;
string current_time;
cout << "Wprowadz czasy z maratonu:\n";
for (int i = 0; i < t_elements; i++) {
cin >> current_time;
// if(time_is_correct)
tab.push_back(current_time);
}
string min_time;
for (int i = 1; i < tab.size(); i++) {
if (tab[i - 1] < tab[i]) {
min_time = tab[i - 1];
}
}
cout << min_time;
return 0;
}