记录下strcpy()和string类的简单实现
已知strcpy函数的原型为:
已知strcpy函数的原型为:
const char* strcpy(const char* src, const char* dst);
实现如下:
char* strcpy(const char* src, const char* dst){
if(src == NULL || dst == NULL){
return NULL;
}
char* ret = dst;
while((*ret++ = *src++) != '\0');
*dst = '\0';
return dst;
}
已知string类的原型为:
class String
{
public:
// 普通构造函数
String(const char *str = NULL);
// 拷贝构造函数
String(const String &other);
// 析构函数
~ String(void);
// 赋值函数
String & operate =(const String &other);
private:
// 用于保存字符串
char *m_data;
};
实现如下:
//普通构造函数
String::String(const char *str)
{
if(str==NULL)
{
m_data = new char[1];
*m_data = '\0';
}
else
{
int length = strlen(str);
m_data = new char[length+1];
strcpy(m_data, str);
}
}
//析构函数
String::~String(void)
{
delete [] m_data; // 或delete m_data;
}
//拷贝构造函数
String::String(const String &other)
{
int length = strlen(other.m_data);
m_data = new char[length+1];
strcpy(m_data, other.m_data);
}
//赋值函数
String & String::operate =(const String &other)
{
if(this == &other)
return *this;
delete [] m_data;
int length = strlen( other.m_data );
m_data = new char[length+1];
strcpy( m_data, other.m_data );
return *this;
}
这类面试题一般都很简单,但切记要判断所给参数是否为NULL