如何计算文件中每个字母的频率?

时间:2019-07-02 01:54:02

标签: c++ arrays string

我有一个程序要制作,我们被要求计算每个字母在文件中出现的次数。我们也要数单词。

文件显示为:

hello word all is well.

我想出了如何对单词进行计数,但是我不知道如何对频率进行计数。从昨天开始,我一直在这样做,而且我什至不知道如何开始。

#include <iostream>
#include <fstream>
#include <cctype>
#include <cstring>

using namespace std;

const int SIZE = 78;

void wordcount(fstream& in, char character[], int& counter);
void freq(fstream& in, char character[],  int& counter);

int main()
{
    char character[SIZE];
    int counter = 0;
    fstream in;

    wordcount(in, character, counter);
    return 0;
}
void freq(fstream& in, char character[], int& counter)
{ 



}

void wordcount(fstream& in, char character[], int& counter)
{
    int word = 0;
    counter = 0;
    in.open("mytext.dat");
    {
        while (!in.eof() && counter < SIZE)
        {
            in.get(character[counter]);
            if (character[counter] == ' ' || character[counter -1] == '.')
            {
                ++word;
            }
            counter++;
        }
        cout << word << " words" << endl;
        //freq(in, character, counter);
        in.close();
    }
}

1 个答案:

答案 0 :(得分:-2)

如何计算字母的出现频率?

让我们想象一下,我们只想计算元音的频率。因此,我们使用一个数组(或某个容器)。

const size_t NO_OF_VOWELS = 5;

// array to hold count of each vowel in file
// and initialized to 0
int vowels[NO_OF_VOWELS] = {0};

数组中的每个位置代表一个元音,所以

  • 索引0代表
  • 索引1代表e
  • 索引2适用于
  • 索引3代表o
  • 索引4用于u

文件中的第一个字母,即元音为e-,因此位置索引1处的数组元素递增。下一个元音为o-,因此位置索引3处的数组元素增加。 依此类推。

元音可以很简单地编程,但是当要计数的字母更多时,了解

  1. char是一个整数值-因此每个字母都有一个整数值
  2. char可用于整数算术
  3. cctype标头声明诸如isalpha之类的功能
  4. 您可以使用

    来获得小写字母的字母位置

    alpha_position = letter - 'a';

实现数组的一种较不常见的方法-使数组足够大以容纳ASCII字符集,并使用字符值作为数组的位置索引。