使用VC6打开考生文件夹下的工程test31_3。此工程包含一个test31_3.cpp,其中定义了可以动态分配的字符串类,但该类的定义并不完整。请按要求完成下列操作,将程序补充完整。 (1)定义类tstring的私有数据成员length和p,它们分

admin2010-02-08  14

问题 使用VC6打开考生文件夹下的工程test31_3。此工程包含一个test31_3.cpp,其中定义了可以动态分配的字符串类,但该类的定义并不完整。请按要求完成下列操作,将程序补充完整。
   (1)定义类tstring的私有数据成员length和p,它们分别是血型的数据和字符型的指针,其中length表示一个字符串的长度。请在注释“//**1**”之后添加适当的语句。
   (2)完成类tstring的构造函数,使length等于字符串m的长度,并申请由指针p指向的length长的字符型空间,将m所指的字符串复制到该空间。请在注释“//**2**”之后添加适当的语句。
   (3)完成类tstring的成员函数strcopy(tstringn)的定义,该函数将对象n的值(包括字符串长度和字符串本身)复制给调用该函数的对象(对象n的字符串长度任意)。请在注释“//**3**”之后添加适当的语句。
   (4)完成类tstring的友元函数strlink(tstring m,tstring n)的定义,该函数将可动态分配的字符串类对象m和n的字符串成员连接在一起(对象m和n的字符串长度任意),并返回该串。请在注释“//**4**”之后添加适当的语句。
   注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。
   程序输出结果如下:
   hello the world!
   源程序文件test31_3.cpp清单如下:
       #include<iostream.h>
       #include<conio.h>
       #include <string.h>
       class tstring
       {
       public:
       //** 1 **
       tstring(char *m)
       {
            //** 2 **
       strcpy(p,m);
        }
        void strcopy(tstring n);
        friend char *strlink(tstring m,tstring n);
       };
       void tstring::strcopy(tstring n)
       {
        //** 3 **
        char *q;
        q=new char[length];
        strcpy(q,tstring::p);
        q=strcat(tstring::p,n.p);
        tstring::p=q;
        tstring::length=strlen(tstring::p);
       }
       char *strlink(tstring m, tstring n)
       {
        int length=strlen(m.p)+strlen(n.p);
        char *p;
        //** 4 **
        strcpy(p,m.p);
        p=strcat(p,n.p);
        return p;
       }
       void main ( )
       {
        tstring a("hello ");
        tstring b("the world");
        tstring c("!");
        a.strcopy(b);
        cout<<strlink(a,c)<<end1;
       }

选项

答案(1) int length; char *p; (2) length=strlen(m); p=new char[length]; (3) int length=strlen(tstung::p)+strlen(n.p); (4) p=new char[length];

解析 本题是对类与字符串常用函数的综合考查。字符串常用函数strcpy、strcat和strlen的调用格式和调用限制是需要熟练掌握的。程序中通过申请新的空间和改变指针指向解决了原有字符串函数strcpy的目标字符串空间必须足够大的问题。根据实际情况利用以有类建立新类的能力是需要培养的。
转载请注明原文地址:https://kaotiyun.com/show/37ID777K
0

最新回复(0)