查看文章
 
中兴通讯C++/C笔试题(答案2)
2008-03-03 15:29

五、编写strcpy函数(10分)

已知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

}

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

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

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

六、编写类String的构造函数、析构函数和赋值函数(25分)

已知类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);                

    }

}   

// 拷贝构造函数

    String::String(const String &other)   // 3

    {   

    int length = strlen(other.m_data);

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

    strcpy(m_data, other.m_data);         

}

// 赋值函数

    String & String::operate =(const String &other)    // 13

    {   

       // (1) 检查自赋值                     // 4

       if(this == &other)

           return *this;

    

// (2) 释放原有的内存资源            // 3

       delete [] m_data;

       

       // 3)分配新的内存资源,并复制内容 // 3

    int length = strlen(other.m_data);

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

       strcpy(m_data, other.m_data);

       

       // 4)返回本对象的引用            // 3

       return *this;

}   

(完!)


类别:实战训练||添加到搜藏 |分享到i贴吧|浏览(746)|评论 (0)
 
最近读者:
 
网友评论:
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
     

   
帮助中心 | 空间客服 | 投诉中心 | 空间协议
©2012 Baidu