Edición de la Universidad de Zhejiang "Estructura de datos (segunda edición)" Colección de preguntas-Ejercicio 5.13

Ejercicio 5.13 Estadísticas de frecuencia de palabras (30 punto (s))

Escriba un programa para contar todas las palabras diferentes en un fragmento de texto en inglés y el 10% de las palabras con la mayor frecuencia de palabras.

La llamada "palabra" se refiere a una cadena continua compuesta por no más de 80 palabras y caracteres, pero las palabras con una longitud de más de 15 solo serán interceptadas y reservadas para las primeras 15 palabras y caracteres. Los "caracteres de palabra" legales son letras mayúsculas y minúsculas, números y guiones bajos, y otros caracteres se consideran separadores de palabras.

Ejemplo:

#include <iostream>
#include <map>
#include <list>
#include <string>
#include <cstring>
using namespace std;

map<string, int> Read()
{
    map<string, int> Freq{};
    int  top = 0;
    while(1) {
        char word[16];
        char ch;
        cin.get(ch);
        if(isdigit(ch) || isalpha(ch) || ch == '_') {
            if(top < 15) {
                if('A' <= ch && ch <= 'Z') ch += 32;
                word[top++] = ch;
            }
        } else if(top) {
            word[top] = '\0';
            top = 0;
            Freq[word] += 1;
        }
        if(ch == '#') break;
    }
    return Freq;
}

int main()
{
    map<string, int> Freq = Read();
    list<pair<string, int>> Seq{};
    for(auto &x : Freq) {
        auto y = Seq.begin();
        while(y != Seq.end()) {
            if(y->second < x.second) break;
            y++;
        }
        Seq.insert(y, x);
    }
    int cnt = Freq.size() / 10;
    cout << Freq.size() << endl;
    for(auto x = Seq.begin(); x != Seq.end(); x++) {
        if(--cnt < 0) break;
        cout << x->second << ':' << x->first << endl;
    }
    return 0;
}

Ideas:

Use map para contar el número de ocurrencias de palabras, luego colóquelas en la lista vinculada en orden descendente y finalmente imprima las primeras N palabras.

Supongo que te gusta

Origin blog.csdn.net/u012571715/article/details/113310430
Recomendado
Clasificación