Zápočet 29.1.2016 - "HTML"

Základní kurs objektově orientovaného programování v C++. Třídy a objekty, zapouzdření, metody, plymorfismus. Abstraktní datové typy, přetěžování. Kontejnery, iterátory, algoritmy. Šablony, generické programování, kompilační polymorfismus. Výjimky. Bezpečné a přenositelné programování, vazby na OS.
Quarwen
Matfyz(ák|ačka) level I
Příspěvky: 7
Registrován: 8. 1. 2016 17:31
Typ studia: Informatika Bc.

Zápočet 29.1.2016 - "HTML"

Příspěvek od Quarwen »

Úkolem bylo napsat jednoduchý převaděč z HTML do markdownu.

Zadání i Jendovo řešení - strašná prasárna - je v příloze.

Bylo povoleno všechno kromě komunikace (messaging, chat). Při odevzdávání si nechal dopsat do vstupu pár tagů a na kód se skoro nedíval.

Oficiální „správné“ řešení bylo udělat stavový automat.

Kód: Vybrat vše

Zadání zápočtového testu z C++

Úkolem je zobrazit HTML v textové podobě.
Základní zadání

Vytvořte program, který dostane z příkazové řádky jména dvou souborů. První soubor představuje vstup v omezeném a zjednodušeném HTML, druhý soubor je textový výstup zobrazení HTML.

Vstupní HTML soubor musí odpovídat XHTML, tj. všechny otvírací HTML tagy mají i odpovídající párový ukončovací tag.

Tagy nemají žádné atributy, nelze použít zkrácený uzavřený tag, vždy musí být dvojice otevírací a ukončovací tag, např. <hr></hr> je povoleno, nemůže být <hr/>.

Vstupní HTML obsahuje pouze tagy z těla HTML, tj. vůbec neřešíme <head> a na vstupu nebude, řešíme jen vnitřek <body>, na vstupu tag <body> také není.

Tagy se až na jednu výjímku nesmí vnořovat, tj. uvnitř tagu <P> nemůže být tag <UL>.

Tagy mohou být zapsány libovolnou kombinací malých a velkých písmen. Uvnitř tagu nejsou povoleny žádné mezery.

Mezi tagy nejsou povoleny žádné znaky s výjímkou mezerových znaků (whitespaces).

Podporovány jsou následující tagy:

    H1 — všechna písmena budou zobrazena velkými písmeny, je podporována pouze anglická abeceda, tvoří samostatnou řádku (viz <P>)
    H2 — počáteční písmena slov budou zobrazena velkými písmeny, je podporována pouze anglická abeceda, tvoří samostatnou řádku (viz <P>)
    P — zobrazí se jako samostatná jedna řádka, tj. více řadek uvnitř tagu se spojí do jedné řádky, oddělení je prázdnou řádkou
    UL — blok odrážek, může se vnořovat, do <LI> tagu, všechny odpovídající odrážky začínají o 4 mezery dále, uvnitř tagu mohou být pouze <LI> tagy, žádný text
    LI — odrážka uvnitř <UL> tagu, začíná na znak *, následuje mezera, pak text odrážky, více řádek se sleje v jednu řádku, uvnitř tagu je povolen buď text nebo <UL> tag, žádná kombinace
    HR — zobrazí vodorovnou čáru pomocí 40 znaků -, uvnitř tagu nejsou povoleny žádné znaky vyjma mezer (whitespaces)

Při slučování více řádek do jedné řádky vznikne mezi posledním slovem na řádce a prvním slovem na následující řádce právě jedna mezera.

Jakákoliv chyba (např. při párování nebo rozeznávaní tagů) je hlášena.
Ukázka
HTML vstup
<H1>Nadpis stranky</H1>
<H2>Vnorene odrazky</H2>
<p>Prvni radka odstavce,
druha radka odstavce</p>
<hr></hr>
<Ul>
<li>prvni normalni odrazka</li>
<li>druha normalni odrazka</li>
<li><ul>
<li>prvni zanorena odrazka</li>
<li>druha zanorena odrazka</li>
</ul></li>
<li>treti normalni odrazka</li>
</uL>
Textový výstup

	NADPIS STRANKY
	

	Vnorene Odrazky
	

	Prvni radka odstavce, druha radka odstavce
	

	----------------------------------------
	

	    * prvni normalni odrazka
	    * druha normalni odrazka
	        * prvni zanorena odrazka
	        * druha zanorena odrazka
	    * treti normalni odrazka
	
Přílohy
zap.cpp
(4.97 KiB) Staženo 372 x
Odpovědět

Zpět na „NPRG041 Programování v C++“