面试 准备之 字符串: Append

我们知道,面试中经常出现对字符串的操作,看起来简单的函数实现,其实做起来还是有点难度的,加之,是在比较紧张的氛围下。一行漂亮的代码可以让面试官眼睛一亮。

 先来看看Append函数吧!

先上写好的代码吧(给予VS2008开发的)

char* CharAppend( char* sourceChar1,char *sourceChar2)//分别传入要拼接的两个字符串,
{
int i=0;
int j=0;
char* DesChar=new char();//开辟一个新的区域,存放拼接后的字符串
while((DesChar[i]=sourceChar1[i])!='\0')//先拼接第一个
{
i++;
}
   j=i;
   while((DesChar[j]=sourceChar2[j-i])!='\0')//再拼接第二个
   {
   j++;
   }
   return DesChar;
  
}


测试:

放入main函数试试:

#include"iostream"
using namespace std;




 char* CharAppend(char*,char*);
int main()
{
char* originalChar="abc";
//originalChar="abc";
char*secondChar="efg";
char* AppendedChar= CharAppend(originalChar,secondChar);

return 0;

}


OK 结果成功!!!

但是发现一个问题:子函数内部:new了一个变量,却没有delete,会造成内存泄露,对于面试官来说,此乃大忌!!但是在子函数外面delete会引起编译错误!!

改程序如下:可以传入char*,用于存放拼接后的字符串。

#include"iostream"
using namespace std;




void CharAppend(char*,char*,char*);
int main()
{
char* originalChar="abc";
//originalChar="abc";
char*secondChar="efg";
char* DesStr=new char();
CharAppend(DesStr,originalChar,secondChar);


cout<<DesStr;


return 0;


}
void CharAppend(char* DesStr, char* sourceChar1,char *sourceChar2)
{int i=0;
int j=0;
while((DesStr[i]=sourceChar1[i])!='\0')
{
i++;
}
   while((DesStr[i]=sourceChar2[j])!='\0')
   {
    i++;
j++;
   }
}


此程序就能正确输出了。

咋们再来看看网上关于StrCat代码。注意的是:因为是面试题,所以尽量不要去调用c的库函数,一般题目也会这么要求,要不就没意义了。

一下的参考代码来自博客:http://blog.csdn.net/yexianyi/article/details/4092945,引用请注明出处。

Char* strcat ( char * dst , const char * src )

{

char * cp = dst;

while( *cp )

cp++; /* find end of dst */

while( *cp++ = *src++ ) ; /* Copy src to end of dst */

return( dst ); /* return dst */

}

但是 ,我有一个疑问:作者直接在dst后加入src,但是怎么可以确定dst后还有空间呢???万一没有呢,是不是有个安全隐患????回去问问大牛师兄吧。还有就是src没控制大小。废话别说,运行一下就知道。


还有个细节,记得加const.....错误的原因 在下一篇中分析、、、

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值