C Program przepisujący 10 ostatnich wierszy ze standardowego wejścia na wyjście

0

Witam
Pewnie moj problem wyda Wam sie smiesznie prosty ale mam problem z ponizszym zadaniem:
"Napisz program, ktory na standardowym wyjsciu wypisze dziesiec ostatnich wierszy z tekstu podanego na standardowym wejsciu. Jesli na wejsciu tekst ma mniej niz 10 wierszy, to nalezy go skopiowac w calosci. Mozna zalozyc, ze laczna dlugosc 10 kolejnych wierszy w tekscie nie przekracza stalej MAX10 rownej 10 000. Nie wolno ograniczac dlugosci tekstu wejsciowego.".
Nie prosze o rozwiazanie a o wskazowki dotyczace zadania.
pozdrawiam i z gory dziekuje

0

Ja (cpp newbie) zrobił bym to w ten sposób, że do tablicy dziesięcioelementowej wpisywałbym po kolei wiersze, po przekroczeniu 10 nadpisywałbym tablicę od początku. Po tym, jak wejście by się to skończyło (na n. pozycji) wypisywałbym tablicę od table[n+1] do table[9] a później od table[0] do table[n].

0

Ma być dość wydajnie czy ma po prostu działać?
1 ) fseek, ftell - lecisz na koniec pliku, sprawdzasz rozmiar pliku, cofasz się o bajt i wczytujesz go do pamięci. robisz tak aż wczytasz max 10 linijek.
2) robisz listę linii. wczytujesz kolejne linie. Jeżeli wczytasz 10, to następne wczytujesz na zasadzie, że usuwasz z listy pierwszą linię, a na koniec dodajesz nową.

0

1) On przecież nie napisał, że wejście jest z pliku. Standardowe wejście to

 cin >> 

2) To jest dobry pomysł :) http://pl.wikibooks.org/wiki/C++/Listy

0

Program musi być w C :) super pomysł z wpisywaniem wierszy do elementów tablicy, jak znajde chwilę to spróbuję napisać program tym sposobem

0

Jeśli piszesz pod Linuksem:

system("tail -n 10 plik.txt");

plik.txt może być tymczasowy utworzony na podstawie standardowego wejścia :D

0

Chyba najszybciej by było sczytać z pare kilobajtów na raz i przelecieć pętlą zliczając wystąpienia '\n'. Jak ilość wystąpień osiągnie 10, zamieniasz ostatnie na '\0' i wypluwasz na wyjście kończąc program. Jeżeli przeleciałeś cały bufor, to go wypisujesz, zachowując dotychczasowy licznik '\n'. Jeżeli nie zapełnił się cały bufor, to już dalej nie wczytujesz danych.

A nie, źle przeczytałem, masz wypisać ostatnie. To bym zrobił używając cyklicznego bufora opartego na tablicy o rozmiarze max10 pobierając dane jakimś fgetsem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0