Fiind data o fraza de cuvinte, introdusa de la dispozitivul standard de intrare stdin, avand ca terminator de rand caracterul \n. Sa se determine frecventa de aparitie a cuvintelor din fraza, transformate toate in minuscule. Sa se afiseze la dispozitivul standard de iesire stdout in ordinea descrescatoare a numarului de aparitii a acestora, in formatul cuvant - numar de aparitii, utilizand lista simplu inlantuita.
Exemplu:
Date de intrare: "Care este persoana care a scris pe acea carte? Este cumva acea persoana care sta pe banca?"
Date de iesire:
care - 3
acea - 2
este - 2
pe - 2
persoana - 2
a - 1
banca - 1
carte -1
cumva - 1
scris - 1
sta - 1
Răspunsuri la întrebare
Program C++ :
#include <iostream>
#include <forward_list>
#include <string>
#include <sstream>
//Comparator pentru sortarea cuvintelor descrescator dupa numarul de aparitii
bool comparator_cuvinte(std::pair<std::string, int>& a, std::pair<std::string, int>& b) {
return a.second > b.second;
}
//Citire fraza
std::string citire_cuvant() {
std::string input;
std::getline(std::cin, input);
//Transformare in litere mici, eliminare caractere extra
for (auto& c : input) {
if (c >= 'a' && c <= 'z') continue;
if (c >= 'A' && c <= 'Z') c = c - 'A' + 'a';
else c = ' ';
}
return input;
}
//Construire lista cu cuvinte si numar de aparitii
std::forward_list<std::pair<std::string, int>> creare_lista_cuvinte(std::string input) {
std::forward_list<std::pair<std::string, int>> lista;
std::istringstream iss(input);
std::string word;
while (iss >> word) {
bool gasit = 0;
for (auto it = lista.begin(); it != lista.end(); it++) {
if (it->first == word) {
it->second++;
gasit = 1;
break;
}
}
if (!gasit) lista.push_front({ word, 1 });
}
return lista;
}
void afisare(std::forward_list<std::pair<std::string, int>> lista) {
for (auto item : lista) {
std::cout << std::endl << item.first << " - " << item.second;
}
}
int main() {
//Citire fraza
std::string input = citire_cuvant();
//Creare lista cuvinte
std::forward_list<std::pair<std::string, int>> lista = creare_lista_cuvinte(input);
//Sortare in functie de numarul de aparitii
lista.sort(comparator_cuvinte);
//Afisare rezultat
afisare(lista);
}