应用题
请使用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交换。