我们知道,面试中经常出现对字符串的操作,看起来简单的函数实现,其实做起来还是有点难度的,加之,是在比较紧张的氛围下。一行漂亮的代码可以让面试官眼睛一亮。
先来看看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.....错误的原因 在下一篇中分析、、、