就业数据资源平台
当前位置:首页 > 笔试题目
笔试题(构造函数)


编写strcpy函数


已知strcpy函数的原型是


       char *strcpy(char *strDest, const char *strSrc);

      其中strDest是目的字符串,strSrc是源字符串。

(1)不调用C++/C的字符串库函数,请编写函数 strcpy


char *strcpy(char *strDest, const char *strSrc);


{


    assert((strDest!=NULL) && (strSrc !=NULL));   // 2分

    char *address = strDest;                    // 2分

    while( (*strDest++ = * strSrc++) != ‘\0’ )     // 2分

       NULL ;

    return address ;                           // 2分

}


(2)strcpy能把strSrc的内容复制到strDest,为什么还要char * 类型的返回值?


答:为了实现链式表达式。 // 2分


例如 int length = strlen( strcpy( strDest, “hello world”) );




编写类String的构造函数、析构函数和赋值函数


已知类String的原型为:


    class String

    {

      public:

        String(const char *str = NULL); // 普通构造函数

        String(const String &other);         // 拷贝构造函数

        ~ String(void);                      // 析构函数

        String & operate =(const String &other);     // 赋值函数

      private:

        char     *m_data;                 // 用于保存字符串

    };

      请编写String的上述4个函数。

标准答案:


// String的析构函数


       String::~String(void)                // 3分

{


    delete [] m_data;                     

// 由于m_data是内部数据类型,也可以写成 delete m_data;


       }

       // String的普通构造函数            

       String::String(const char *str)       // 6分

{


    if(str==NULL)                         

    {

      m_data = new char[1];     // 若能加 NULL 判断则更好

       *m_data = ‘\0’;                     

    }                                         

    else

    {

       int length = strlen(str);          

       m_data = new char[length+1];   // 若能加 NULL 判断则更好     

       strcpy(m_data, str);               

    }

}

就业数据资源平台