#include<iostream>
#include<fstream>
#include<cctype>
#include<iomanip>
#include<cstdlib>
#define Maxpath 80
//文件名最大长度
using namespace std;
//functions
int fre[26];
//记录次数的
const char str[]="abcdefghijklmnopqrstuvwxyz";
// 字母表
static int up=0,low=0,wsp=0,total=0;
// up 为 大写的个数 low为小写的,wsp为空,制表符。。。total 总数
void frequency(char ch);
//记录大小写的函数
void count(char filename[]);
//记录总的函数
void print();
//打印的函数
int main()
{
char filename[Maxpath];
//文件名
cout<<"输入文件全名:"<<endl;
cin.getline (filename,Maxpath);
//获得文件名
count(filename);
//记录个数
print();
//打印
return 0;
}
//************************************************
void frequency(char ch)
{
for(int i=0;i<26;i++)
if(ch==str[i])
//判断是哪个字母,那个字母代表的个数加一
{
fre[i]++;
break;
//跳出本次循环
}
}
//************************************************************
void count(char filename[])
{
fstream istr;
char ch,ch2;
istr.open (filename,ios::in);
//打开文件 打不开退出
if(istr.fail ())
{
cout<<"Can't open!"<<endl;
exit(1);
}
do
//记录个数
{
ch=istr.get ();
if(isspace(ch))
//判断是否是 space
wsp++;
else if(isalpha(ch))
//判断是否是 字母
{
if(isupper(ch))
//是否是大写
up++;
else
//是否是小写
low++;
ch2=tolower(ch);
//转成小写 配合str[] 字符串
frequency(ch2);
//记录abc的单独的个数
}
else
;
total++;
//总数+1
}while(!istr.eof());
total-=1;
//最后的总数
}
//*****************************************************************
void print()
{
int Count=0;
//cout<<"输入要显示的最小个数的字母"<<endl;
//这里可以添加一点小的功能
//cin>>Count;
cout<<"Letter Frequencies:"<<endl;
for(int i=0;i<26;i++)
{
if(fre[i]>Count)
//判断个数 只显示个数大于Count的字母
cout<<char(toupper(str[i]))<<setw(6)<<fre[i]<<endl;
//格式输出如:
}
//大写的字母
//
对应的次数
A
3
cout<<endl;
// B
4
cout<<"Rest of Letters"<<endl;
//
C
5
cout<<"Upper Case"<<endl;
//up
cout<<up<<endl;
cout<<"Lower Case"<<endl;
//low
cout<<low<<endl;
cout<<"White Space"<<endl;
// space
cout<<wsp<<endl;
cout<<"Total char"<<endl;
cout<<total<<endl;
//总数
}