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

Której godziny najbliżej ? plik zewnętrzny z godzinami

Object Storage Arubacloud
0 głosów
254 wizyt
pytanie zadane 31 października 2018 w C i C++ przez systemXYZ Początkujący (290 p.)

Hej Ludzie ! :) 

Wyobraźcie sobie, że dostajecie do programu jak argument plik tekstowy zawierający godziny np. 8:11 10:45 11:04  16:45 17:20   i powiedzmy, że są to godziny odlotów samolotów, jak widać z góry juz ustawione są rosnąco. Program przyjmuję nazwę tego pliku np. w konsoli program.exe < godziny.txt

 Po uruchomieniu programu użytkownik wprowadza na standardowym wejściu godzinę i ma mu się wyświetlić najbliższa godzina odlotu. Np użytkownik wprowadza 8:05 to wyświetla mu się 8:11 jak wprowadza 15:40 to 16:45 a jak 17:21 to 8:11. Jedyne pliki nagłówkowe z jakich  można korzystać to fstream, iomanip, iostream i vector. Jakieś pomysły ? bo utknąłem trochę głęboko z tym .... chyba poradzę sobie z wyświetleniem najbliższej godziny, ale nie wiem jak stworzyć wektor z tych godzin, bo chyba o to chodzi. I jak się do tego zabrać ? 

Przecież nie mogę a raczej nie powinienem tego robić statycznie tworząc

char godziny[500];

 std::cin.getline(words, 500);

na moje oko to mało profesjonalne i co z taką tablica znaków zrobić jak tam godziny. UTKNĄŁEM LUDZIE :/ ktoś naprowadzi/wyjaśni ? 

1 odpowiedź

0 głosów
odpowiedź 31 października 2018 przez criss Mędrzec (172,590 p.)
edycja 31 października 2018 przez criss
 
Najlepsza

 std::cin.getline(words, 500);

Godziny są w pliku.. Więc o co z tym chodzi?

załóżmy, że `f` to obiekt std::ifstream, wczytujesz wszystkie godziny

std::vector<std::string s> v;
std::string s;
while (std::getline(f, s))
   v.push_back(s);

Na potrzeby prostego porównywania godzin warto przekonwertować sobie takiego stringa z godziną na jakiegoś inta. Cokolwiek, byleby porównanie takich intów gwarantowało taki sam wynik jak porównywanie godzin z których wynikają te inty. Jeżeli ograniczasz się tylko do jednego dnia, to konwersja może wyglądać tak: "00:00" -> 0, "00:01" -> 1, ..., "01:00" -> 60, ...

Ah, nie możesz korzystać ze <string>. To ja bym zrobił strukturke z polem char str[100] i używał jej jako kontener na znaki jak string w kodzie wyżej. Chyba możesz założyć, że maksymalna długość godziny to 100.

komentarz 31 października 2018 przez systemXYZ Początkujący (290 p.)
ehhh szczerze mówią to jak grochem o ścianę nie rozumiem jak działa std::ifstream i co robią Twoje 4 linijki.

W pierwszej deklarujesz vector, który ma w sobie stringi (tylko czemu jest string s ?) później deklarujesz sam string i robisz pętlę w której odczytujesz plik tak ? i każdy napotkany string wrzucasz w kolejne miejsce wektora dobrze rozumiem ?

albo jestem bardzo zmęczony i nie mogę czegoś tak prostego ogarnąć, albo całkowicie to nie dla mnie, wejście w c++ jest dla mnie problematyczne :/
komentarz 31 października 2018 przez criss Mędrzec (172,590 p.)
std::getline odczytuje po prostu wszystko az do napotkania znaku nowej linii ze strumienia (tutaj plik `f`) podanego w 1 arg do stringa podanego w 2 arg (tutaj `s`)
komentarz 31 października 2018 przez systemXYZ Początkujący (290 p.)
hmmmm ok ! wracam do pisania kodu ! w razie czego napiszę jak jeszcze będę mieć z tym jakiś problem, ale Twoja odpowiedź mi pomogą na ten moment :)

dziękuję Criss

Podobne pytania

0 głosów
2 odpowiedzi 348 wizyt
0 głosów
1 odpowiedź 201 wizyt
pytanie zadane 15 sierpnia 2019 w C i C++ przez niezalogowany
+2 głosów
1 odpowiedź 401 wizyt
pytanie zadane 26 lutego 2016 w C i C++ przez ScriptyChris Mędrzec (190,190 p.)

92,555 zapytań

141,402 odpowiedzi

319,543 komentarzy

61,939 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!

...