操作题 1.  请使用VC6或使用[答题]菜单打开考生目录proj3下的工程文件proj3,此工程中包含一个源程序文件proj3.cpp,补充编制C++程序proj3.cpp,其功能是读取文本文件in.dat中的全部内容,将文本存放到doc类的对象myDoc中。然后分别统计26个英文字母在文本中出现的次数,统计时不区分字母大小写。最后将统计结果输出到文件out.dat中。文件in.dat长度不大于1000字节。
    要求:
    补充编制的内容写在“//********333********”与“//********666********”之间。实现分别统计26个英文字母在文本中出现的次数,并将统计结果在屏幕上输出。统计时不区分字母大小写,输出不限格式。不得修改程序的其他部分。
    注意:程序最后将结果输出到文件out.dat中,输出函数writeToFile已经给出并且调用。
    // proj3.cpp
    #include <iostream>
    #include <fstream>
    #include <cstring>
    using namespace std;
   
    class doc
    {
    private:
    char * str;  //文本字符串首地址
    int counter[26]; //用于存入26个字母的出现次数
    int length;  //文本字符个数
    public:
    //构造函数,读取文件内容,用于初始化新对象。filename是文件名字符串首地址。
    doc(char * filename);
    void count(); //统计26个英文字母在文本中出现的次数,统计时不区分大小写。
    ~doc();
    void writeToFile(char * filename);
    };
   
    doc::doc(char * filename)
    {
    ifstream myFile(filename);
    int len=1001, tmp;
    str=new char[len];
    length=0;
    while((tmp=myFile.get())!=EOF)
    {
    str[length++] =tmp;
    }
    str[length] ='\0';
    myFile.close();
    for(int i=0; i<26; i++)
    counter[i] =0;
    }
    //************* 333***********
   
   
    //************* 666***********
    doc::~doc()
    {
    delete [] str;
    }
   
    void doc::writeToFile ( char * filename)
    {
    ofstream outFile(filename);
    for(int i=0; i<26; i ++)
    outFile << counter[i] << endl;
    outFile.close();
    }
    void main ()
    {
    doc myDoc ("");
    myDoc.count();
    myDoc.writeToFile("");
    }
【正确答案】void doc::count()
   {
   for(int i=0; i<length; i++)    //从0开始遍整个文本字符
   {
   if(str[i]>='a' && str[i]<='z')    //如是小写字母
   counter[str[i]-'a']++;    //在数组counter对加,做计数
   if(str[i]>='A' && str[i]<='Z')    //如果是大写字母
   counter[str[i]-'A']++;    //在数组counter对应的做计数
   }
   for(int index=0; index<26; ++index)  //遍历数组数counter,将下标转化为字母,然后输出其出现次数
   cout<< (char)(index+65)<< "or"<< (char)(index+97) <<"出现的次数是:"<<counter [index]<<endl;
   }
【答案解析】[考点] 本题考查doc类,其中涉及动态数组、构造函数、成员函数和析构函数。
    主要考查考生对统计字母的掌握,首先要判断该字符是否为字母,即当字符的ASCII码大于等于a,小于等于z时,为小写字母;当大于等于A,小于等于Z时,为大写字母,则用于计量该字母出现次数的元素值加1。如何确定计量字母次数的元素下标是本题的难点。当字母为小写时,用该字母的ASCII码减去a的ASCII码;当字母为大写时,用该字母的ASCII码减去A的ASCII码,即可得到计量该字母的元素下标。