使用前导数字

时间:2017-05-10 22:29:40

标签: c++ sorting file-io word-frequency

我正在处理一个家庭作业问题,这个问题需要我从输入文件中读取单词和整数k。该解决方案需要打印出一个单词及其频率列表,范围从最常见到最常见。如果唯一字的数量小于k,则仅输出该字数。

这可能是像map一样的容器,但问题是我只能使用向量和字符串,而不能使用其他STL容器。

我遇到了一个文件中所有单词列表及其相应频率的位置。现在我需要根据它们的频率对它们进行排序并输出k个单词。

问题是,排序很困难。频率可以是不同的数字。如果我通过填充零来使用string::sort()对它们进行排序,我将无法知道要填充多少个零,因为程序员不知道输入。

这是我的函数代码:

void word_frequencies(ifstream& inf, int k)
{
    vector <string> input;
    string w;
    while (inf >> w)
    {
        remove_punc(w);
        input.push_back(w);
    }
    sort(input.begin(), input.end());

    // initialize frequency vector
    vector <int> freq;
    for (size_t i = 0; i < input.size(); ++i) freq.push_back(1);

    // count actual frequencies
    int count = 0;
    for (size_t i = 0; i < input.size()-1; ++i)
    {
        if (input[i] == input[i+1])
        {
            ++count;
        } else
        {
            freq[i] += count;
            count = 0;
        }
    }

    // words+frequencies
    vector <string> wf;
    for (size_t i = 0; i < freq.size()-1; ++i)
    {

        if (freq[i] > 1 || is_unique(input, input[i]))
        {
            string s = to_string(freq[i]) + " " + input[i];
            wf.push_back(s);
        }
    }
}

另外,我是否应该首先将频率与单词耦合在一起?我知道这很乱,所以我正在寻找更优雅的解决方案。

谢谢!

0 个答案:

没有答案