我們知道,面試中經常出現對字串的操作,看起來簡單的函數實現,其實做起來還是有點難度的,加之,是在比較緊張的氛圍下。一行漂亮的代碼可以讓面試官眼睛一亮。
先來看看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.....錯誤的原因 在下一篇中分析、、、