Tocmai m-am angajat la o firma de soft si prima mea sarcina este sa scriu un program care sa converteasca documente HTML in text simplu. Documentele HTML contin pe langa textul care ma intereseaza si tag-uri de formatare. Orice tag de formatare din documentele mele incepe cu o eticheta de inceput de forma <...> (unde prin ... am notat numele tagului si eventualele sale atribute) si se termina cu o eticheta de sfarsit de forma </...> (unde ... reprezinta numele tag-ului). Ceea ce este cuprins intre eticheta de inceput si cea de sfarsit poate fi text simplu, sau text formatat cu ajutorul altor tag-uri de formatare. In documentele mele poate aparea si text simplu care nu este cuprins intre etichetele unui tag de formatare. In documente, imbricarea tag-urilor este corecta (nu va fi inchis un tag daca exista un tag interior lui care nu a fost inca inchis), iar in interiorul unei etichete nu poate aparea o alta eticheta.
Cerinta
Fiindca eu nu am reusit, scrieti un program care sa converteasca un document HTML in text simplu!
Date de intrare
Fisierul de intrare convert.in contine documentul HTML.
Date de iesire
Fisierul de iesire convert.out va contine textul simplu care se afla in documentul HTML, structurat pe linii si spatiat in acelasi mod.
Restrictii si precizari
Daca pe o linie din fisierul de intrare nu se afla text simplu, in fisierul de iesire va corespunde o linie goala.Exemplu
convert.in<html><head><title>vasile</title></head>
<body>
mult text
<p>un paragraf</p><p> alt paragraf<a href=
"http://www.liis.ro"> liceul meu </a> si iar text </p> </body>
</html>
convert.out
vasile
mult text
un paragraf alt paragraf
liceul meu si iar text
Răspunsuri la întrebare
#include <fstream>
#include <cstring>
using namespace std;
int main(){
ifstream in("convert.in");
char s[200];
bool in_tag = 0;
int tag_starts = 0;
while(in.getline(s, 200)){
for(int i=0;i<strlen(s);i++){
if(!in_tag && s[i] == '<'){
in_tag = 1;
tag_starts = i;
}else if(in_tag && s[i] == '>'){
in_tag = 0;
strcpy(s+tag_starts, s+i+1);
i = tag_starts-1; //Sari inapoi la inceputul textului sters
}
}
if(in_tag){
strcpy(s+tag_starts, s+strlen(s));
// in_tag ramane la fel pentru urmatorul text.
tag_starts = 0;
}
cout<<s<<endl;
}
}