阅读以下说明和C++程序,将应填入(n)处的字句写在对应栏内。 【说明】 字符串在程序设计中扮演着重要角色。现需要设计字符串基类string,包含设置字 符串、返回字符串长度及内容等功能。另有一个具有编辑功能的串类edlt_string,派生

admin2010-01-15  45

问题 阅读以下说明和C++程序,将应填入(n)处的字句写在对应栏内。
    【说明】
   字符串在程序设计中扮演着重要角色。现需要设计字符串基类string,包含设置字 符串、返回字符串长度及内容等功能。另有一个具有编辑功能的串类edlt_string,派生于string,在其中设置一个光标,使其能支持在光标处的插入、删除操作。
   【程序】
   #include <iostream.h>
   #include <stdio.h>
   #include <string.h>

   class string
   {
       int length;
       char *data;
   public:
       int get_length() {return length;}
       char *get_data() {return data;}
       ~string() {delete data;}
       int set data(int in_length, char *in_data);
       int set_data(char *data);
       void print() {cout<<data<<endl;}
   };

   class edit_string: public string
   {
       int cursor;
   public:
      int get_cursor() {return cursor;}
      void move_cursor(int dis) {cursor=dis;}
      int add_data(string *new_data);
      void delete_data(int num);
   };

   int string::set_data(int in_length,char *in_data)
   {
       length=in_length;
       if(!data)
           delete data;
         (1)  
       strcpy(data,in_data);
       return length;
   }
   int string::set data(char *in_data)
   {
         (2)  
       if(!data)
            delete data;
         (1)  
       strcpy(data,in_data);
       return length;
   }
   int edit_string::add_data(string *new_data)
   {
       int n,k,m;
       char *cp,*pt;
       n=new_data->get_length();
       pt=new_data->get_data();
       cp=this->get_data();
       m=this->get_length();
       char *news=new char[n+m+1];
       for(int i=0; i<cursor; i++)
            news=cp;
       k=i;
       for(int j=0; j<n; i++,j++)
            news=pt[j];
       cursor=i;
       for(j=k; j<m; j++,i++)
             (3)  
       news=’\0’;
         (4)  
       delete news;
       return cursor;
   }
   void edit string::delete_data( int num)
   {
       int m;
       char *cp;
       cp=this->get_data();
       m=this->get_length();
       for(int i=cursor; i<m; i++)
            (5) 
      cp=’\0’;
   }

选项

答案(1)data=new char[length+1]; (2)length=strlen(in_data); (3)news[i]=cp[j]; (4)set_data(news); (5)cp[i]=cp[i+num];

解析 本题考查C++中字符串的操作。
   字符是程序设计中常用的一种数据类型,而字符串表示一串字符,在程序设计中扮演着重要角色,是考试中常出现的内容。题目要求设计一个基类能实现字符串设置、返回字符串长度及内容等功能,设计一个子类能支持在光标处的插入、删除操作。
   下面我们来看代码。首先定义了一个string基类,在string基类中,声明了两个成员变量和几个成员函数。接着定义了一个继承string类的派生类edit_string。再下面是对类中成员函数的实现。
   第(1)空在set_data()函数体中,int string::set_data()表明此函数是基类中的成员函数,根据基类要实现的功能,此函数要实现返回字符串长度和设置其内容,在函数体中其长度已经给出,但分配存储空间被delete data删除掉了,应该重新分配,在C++中一般用关键字new实现空间的动态分配。因此,第(1)空的答案是data=new char[length+1]。
   第(2)空在另一个set_data()函数体中,这两个函数同名,但参数不同,这是C++
中用同名函数实现多态的技巧。此函数功能同上一个函数,但它的形参中没有指明字符串的长度,因此,在函数开始时要求出字符串的长度,用函数strlen()。所以,此空答案为length=strlen(in_data)。
   第(3)空和第(4)空在函数add_data()中,此函数是派生类中的成员函数,根据题目要求它要实现的功能是在光标处进行插入。在此函数体中重新分配了一块内存空间,其长度是原有字符串长度和要插入字符串长度之和加1,用来存放这两个字符串。第(3)空所在的位置是循环体下面,根据循环体的判断条件i<m我们可以想到这是要对长度为m的字符串进行插入。因此,此空答案为news=cp[j]。而第(4)空是在完成了插入工作以后,根据程序上下文推断,应该是计算字符长度并返回,因此,答案为 Set_data(news)。
   第(5)空在函数delete_data()中,根据题目要求,此函数应该是实现子类在光标处进行删除的功能。删除一般采用覆盖技术,即将后面的字符往前移动来覆盖掉要删除的字符,第(5)空实现的就是这个功能,要删除num个字符,后面的字符应该往前移动 num,因此,此空答案为cp=cp[i+num]。
转载请注明原文地址:https://kaotiyun.com/show/6BjZ777K
0

最新回复(0)