#include #include #include #include #include struct pavouk { char jmeno; int levy = -1, pravy = -1; // indexy v poli pavouci }; std::vector pavouci; std::string radka; std::string::iterator it; bool je_jmeno_pavouka(char znak) { return znak >= 'a' && znak <= 'z'; }; // vytvori noveho pavouka a vrati jeho index int novy_pavouk() { int p = pavouci.size(); pavouci.push_back(pavouk()); return p; } const int NENI_POTOMEK = -1; const int CHYBA_CTENI = -2; void precti_vstup() { std::getline(std::cin, radka); it = radka.begin(); } char nacti_jmeno() { char jm = *it; if(je_jmeno_pavouka(jm)) { it++; return jm; } else { return CHYBA_CTENI; } } int nacti_pavouka() { if(je_jmeno_pavouka(*it)) { // pavouk bez potomku int p = novy_pavouk(); pavouci[p].jmeno = *it; it++; return p; } else if(*it == '_') { it++; return NENI_POTOMEK; } else if(*it == '(') { // pavouk s potomky int p = novy_pavouk(); it++; int levy = nacti_pavouka(); char jmeno = nacti_jmeno(); int pravy = nacti_pavouka(); if(levy != CHYBA_CTENI && jmeno != CHYBA_CTENI && pravy != CHYBA_CTENI && *it == ')') { pavouci[p].levy = levy; pavouci[p].jmeno = jmeno; pavouci[p].pravy = pravy; it++; return p; } else { return CHYBA_CTENI; } } else { return CHYBA_CTENI; } } bool konec_radky() { return it == radka.end(); } void vypis(int p, std::string& buffer) { buffer.resize(buffer.size() + 1, pavouci[p].jmeno); if(pavouci[p].levy == NENI_POTOMEK && pavouci[p].pravy == NENI_POTOMEK) { std::cout<= 0) { std::string buffer = ""; vypis(p, buffer); } else if(p == NENI_POTOMEK) { std::cout<<"nikdo"<