C++之 字符串拷贝函数(面试题目)

1.已知strcpy 函数的原型是:
char *strcpy(char *strDest, const char *strSrc);
其中strDest 是目的字符串,strSrc 是源字符串。不调用C++/C 的字符串库函数,请编写函数 strcpy
答案:
c代码

char *strcpy(char *strDest, const char *strSrc)
{
if ( strDest == NULL || strSrc == NULL)
return NULL ;
if ( strDest == strSrc)
return strDest ;
char *tempptr = strDest ;
while( (*strDest++ = *strSrc++) !='/0')
;
return tempptr ;
}

注意要点,

(1)传过来的源指针strSrc所指的字符串内容在该函数内是不能够修改的,因此应该声明为const类型。

(2)判断源指针或目的指针为空的情况,思维严谨,要考虑异常处理。

(3)要考虑传过来的源和目的指针指向同一个内存区的情况,如果指向同一内存区则源指针=目的指针,直接返回其中一个即可。

(4)函数原型要注意返回值为目的串的首地址,要考虑拷贝函数的返回值做其他函数的参数

C++代码,因此在函数内要保存目的指针的首地址。

(5)在拷贝字符串时,有两种方式要么先判断字符是否为空,再拷贝,这时候再循环外要给目的串加上'/0'字符;要么先拷贝再判断字符为空。

上面代码是后一种形式。

前一种形式为  

while(*strDest!='/0')

{

*strDest++=*strSrc++;

}

*strDest='/0';

c++代码:

        char * strcpy(char * strDest,const char * strSrc)
        {
                if ((strDest==NULL)||(strSrc==NULL))
                        throw "Invalid argument(s)";

               //注意不能写成 throw new String("invalid argument(s)"),因为在函数中将动态申请的内存,

              //并将地址返回是一个不好的编程习惯,使用者容易在使用完函数后,不管内存的释放。

                if ( strDest == strSrc)
                    return strDest ;


                char * strDestCopy=strDest;  
                while ((*strDest++=*strSrc++)!='/0');
                return strDestCopy;
        }

从代码中看出在C++代码中多了一个异常的处理,用throw抛掷异常。

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值