online: 3; azi: 381; total: 50836 Manual clasa a xi a - Implementarea structurilor de date - Lista liniara

Probleme Rezolvate



Manual clasa a Xi a

Implementarea structurilor de date

Lista liniara

Analiza lexicală a unui text. Să se afişeze , în ordine alfabetică, cuvintele dintr-un text şi frecvenţa lor de apariție în text.
# include < iostream >
# include < fstream >
# include < sstream >
# include < string >
# include < cctype >
struct Nod {
std :: string cuvant ;
int frecventa;
Nod* urm;
};
Nod* insereaza (Nod* cap, const std :: string & cuvant ) {
Nod* curent = cap;
while (curent != nullptr ) {
if (curent-> cuvant == cuvant ) {
curent->frecventa++;
return cap;
}
curent = curent->urm;
}
Nod* nod_nou = new Nod{ cuvant , 1 , cap};
return nod_nou ;
}
void afiseaza_lista (Nod* cap) {
Nod* curent = cap;
while (curent != nullptr ) {
std :: cout << curent-> cuvant << ": " << curent->frecventa << std :: endl ;
curent = curent->urm;
}
}
void sterge_lista (Nod*& cap) {
while (cap != nullptr ) {
Nod* nod_vechi = cap;
cap = cap->urm;
delete nod_vechi ;
}
}
void bubble_sort (Nod*& cap) {
bool schimbare;
do {
schimbare = false ;
Nod** curent = &cap;
while ((*curent)->urm != nullptr ) {
if ((*curent)-> cuvant > (*curent)->urm-> cuvant ) {
Nod* tmp = *curent;
*curent = (*curent)->urm;
tmp ->urm = (*curent)->urm;
(*curent)->urm = tmp ;
schimbare = true ;
}
curent = &((*curent)->urm);
}
} while (schimbare);
}
std :: string to_lower ( const std :: string & s) {
std :: string result = s;
for ( char & c : result ) {
c = std :: tolower (c);
}
return result ;
}
int main () {
std :: ifstream fisier ( "text.txt" ) ;
std :: stringstream buffer;
buffer << fisier. rdbuf ();
fisier. close ();
std :: string text = buffer. str ();
Nod* cuvinte = nullptr ;
std :: istringstream iss (text) ;
std :: string cuvant ;
while ( iss >> cuvant ) {
cuvant = to_lower ( cuvant );
cuvinte = insereaza (cuvinte, cuvant );
}
bubble_sort (cuvinte);
afiseaza_lista (cuvinte);
sterge_lista (cuvinte);
return 0 ;
}