1. 程式人生 > >strcpy,strlen函數和string類原型

strcpy,strlen函數和string類原型

c/c++

編寫strcpy函數:已知strcpy函數的原型是char strcpy(char strDest, const char strSrc);
其中strDest是目的字符串,strSrc是源字符串。
(1)不調用C++/C的字符串庫函數,請編寫函數 strcpy
(2)strcpy能把strSrc的內容復制到strDest,為什麽還要char
類型的返回值?答:為了 實現鏈式表達式。

編寫strlen函數:strlen函數原型是size_t strlen(char *string);
技術分享圖片

測試:

void main()
{
char str1[ ] = "dsvgfgd";
char str2[ ] = "gvdbh";

strcpy(str1, str2);
printf("%s\n", str1);
int i = strlen(str1);
printf("%d\n", i);

}

String類原型:
#include<stdio.h>
#include<assert.h>
#include<string.h>
class String
{
public:
String(const char str = NULL);
String(const String &another);
~String();
String& operator=(const String &rhs);

private:
char
m_data;
};
String::String(const char str)
{
if (str == NULL)
{
m_data = new char[1];
m_data[0] = ‘\0‘;
}
else
{
m_data = new char[strlen(str) + 1];
strcpy(m_data, str);
}
}
String::String(const String &another)
{
m_data = new char[strlen(another.m_data) + 1];
strcpy(m_data, another.m_data);
}
String& String::operator=(const String &rhs)
{
if (this == &rhs)
return
this;
delete [ ]m_data;
m_data = new char[strlen(rhs.m_data) + 1];
strcpy(m_data, rhs.m_data);
return *this;
}
String::~String()
{
delete [ ]m_data;
}

strcpy,strlen函數和string類原型