使用C++语言输出某个文本文件中 26 个字母和汉字出现的频率,由高到低排列,并显示出现的百分比,精确到小数点后面两位。
时间: 2024-05-04 19:22:12 浏览: 12
以下是使用C++语言实现的代码:
```cpp
#include <iostream>
#include <fstream>
#include <map>
#include <vector>
#include <algorithm>
#include <iomanip>
using namespace std;
int main() {
ifstream fin("input.txt"); // 打开输入文件
map<char, int> freq; // 存放每个字母和汉字出现的频率
char c;
int total = 0; // 总字符数
while (fin.get(c)) { // 逐个读取字符
if (isalpha(c) || iscntrl(c) || isdigit(c) || isspace(c)) {
// 只统计字母和汉字的出现频率,其他字符忽略
++freq[c]; // 计数器加1
++total;
}
}
fin.close(); // 关闭输入文件
vector<pair<char, int>> freqVec(freq.begin(), freq.end()); // 将map转换为vector,方便排序
sort(freqVec.begin(), freqVec.end(), [](const pair<char, int>& a, const pair<char, int>& b) {
return a.second > b.second; // 按频率从高到低排序
});
// 输出排序后的结果
for (const auto& item : freqVec) {
double percent = static_cast<double>(item.second) / total * 100;
cout << item.first << ": " << item.second << " (" << fixed << setprecision(2) << percent << "%)" << endl;
}
return 0;
}
```
该程序首先打开输入文件,逐个读取字符并统计字母和汉字的出现频率,然后将结果存放在一个map对象中。接着,程序将map对象转换为vector对象,并按出现频率从高到低排序。最后,程序输出排序后的结果,包括每个字符的出现次数和百分比。
需要注意的是,在计算百分比时,需要将出现次数转换为double类型,以避免整数除法截断小数部分。此外,为了输出精确的小数部分,需要使用fixed和setprecision函数设置输出格式。