Informatică, întrebare adresată de amicandreea, 8 ani în urmă

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

Răspuns de andrei750238
1

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);

}

Anexe:
Alte întrebări interesante