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

Odpowiedz Nowy wątek
2011-10-08 22:02
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

Pozostało 580 znaków

2011-10-08 22:15
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].


Pozostało 580 znaków

2011-10-09 10:53
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ą.

Pozostało 580 znaków

2011-10-09 12:05
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


Pozostało 580 znaków

2011-10-09 12:21
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

Pozostało 580 znaków

2011-10-09 13:18
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

edytowany 1x, ostatnio: Spine, 2011-10-09 13:18

Pozostało 580 znaków

2011-10-09 19:14
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.

edytowany 1x, ostatnio: Zjarek, 2011-10-09 19:16

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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