想面試c++方面的職位,那么下面的求職筆試題目可能對您有幫助哦。
1. 已知strcpy的函數(shù)原型:char *strcpy(char *strDest, const char *strSrc)其中strDest 是目的字符串,strSrc 是源字符串。不調(diào)用C++/C 的字符串庫函數(shù),請編寫函數(shù) strcpy。
答案:
復(fù)制代碼
#include <assert.h>
#include <stdio.h>
char*strcpy(char*strDest, constchar*strSrc)
{
assert((strDest!=NULL) && (strSrc !=NULL)); // 2分
char* address = strDest; // 2分
while( (*strDest++=*strSrc++) !='\0' ) // 2分
NULL;
return address ; // 2分
}
復(fù)制代碼
另外strlen函數(shù)如下:
復(fù)制代碼
#include<stdio.h>
#include<assert.h>
int strlen( constchar*str ) // 輸入?yún)?shù)const
{
assert( str != NULL ); // 斷言字符串地址非0
int len = 0;
while( (*str++) !='\0' )
{
len++;
}
return len;
}
復(fù)制代碼
2. 已知String類定義如下:
復(fù)制代碼
class String
{
public:
String(const char *str = NULL); // 通用構(gòu)造函數(shù)
String(const String &another); // 拷貝構(gòu)造函數(shù)
~String(); // 析構(gòu)函數(shù)
String& operater =(const String &rhs); // 賦值函數(shù)
private:
char* m_data; // 用于保存字符串
};
復(fù)制代碼
嘗試寫出類的成員函數(shù)實現(xiàn)。
答案:
復(fù)制代碼
String::String(constchar*str)
{
if ( str == NULL ) // strlen在參數(shù)為NULL時會拋異常才會有這步判斷
{
m_data =newchar[1] ;
m_data[0] ='\0' ;
}
else
{
m_data =newchar[strlen(str) +1];
strcpy(m_data,str);
}
}
String::String(const String &another)
{
m_data =newchar[strlen(another.m_data) +1];
strcpy(m_data,other.m_data);
}
String& String::operator=(const String &rhs)
{
if ( this==&rhs)
return*this ;
delete []m_data; //刪除原來的數(shù)據(jù),新開一塊內(nèi)存
m_data =newchar[strlen(rhs.m_data) +1];
strcpy(m_data,rhs.m_data);
return*this ;
}
String::~String()
{
delete []m_data ;
}
復(fù)制代碼