应用题   请使用VC6或使用[答题]菜单打开考生文件夹proj2下的工程proj2,此工程中含有一个源程序文件proj2.cpp,其中定义了MyString类。MyString是一个用于表示字符串的类,其构造函数负责动态分配一个字符数组,并将形参指向的字符串复制到该数组中;成员函数reverse的功能是对字符串进行反转操作,例如,字符串“ABCDE”经过反转操作后,会变为“EDCBA”;成员函数print的作用是将字符串输出到屏幕上。
    请在横线处填写适当的代码并删除横线,以实现MyString类的功能。此程序的正确输出结果应为:
    Before reverse:
    abc
    defg
    After reverse:
    cba
    gfed
    注意:只在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“//****found****”。
    //proj2.cpp
    #include <iostream>
    using namespace std;
   
    class MyString {
    public:
    MyString (const char* s)
    {
    //********** found**********
    m_str = new char[______];
    strcpy (m_str, s);
    }
    ~MyString ()
    {
    //********** found**********
    ______;
    }
   
    void reverse ()
    {
    int n = strlen(m_str);
    for (int i=0; i < n/2; ++i) {
    int tmp = m_str[i];
    //********** found**********
    m_str[i] = ______;
    //********** found**********
    ______;
    }
    }
    void print ()
    {
    cout << m_str << endl;
    }
    //其他成员...
    private:
    char* m_str;
    };
   
    int main(int argc, char * argv[])
    {
    MyString str1 ('abc'), str2 ('defg');
    cout << 'Before reverse: \n';
    str1.print ();
    str2.print ();
    str1. reverse ();
    str2.reverse ();
    cout << 'After reverse: \n';
    str1.print ();
    str2.print ();
    return 0;
    }
 
【正确答案】strlen(s)+1 delete[]m_str m_str[n-i-1] m_str[n-i-1]=tmp
【答案解析】[考点] 本题考查MyString类,其中涉及构造函数、动态数组、析构函数和成员函数。 (1)考查使用new语句动态分配内存空间,要分配的空间大小应为字符串的长度加1。 (2)主要考查考生对析构函数的掌握,析构函数使用delete语句释放指针。 (3)和(4)主要考查考生对成员函数的掌握,这里是一个变量交换操作,通过中间变量tmp交换。