#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;
            //总数
}
