实现功能
实现string中的创建方式
string str1; //需要无参&有参&拷贝构造函数
string str2("ILoveyou");
string str3(str1);
string str4 = str2;
通过实现data()和c_str()函数 打印字符串
cout << str2.c_str() << endl; //打印ILoveyou
cout << str2.data() << endl; //打印ILoveyou
实现append()实现字符串的连接
string strOne="one";
string strTwo="two";
string strThree=strOne.append(strTwo);
cout<<strThree.data()<<endl; //onetwo
实现字符串比较
cout<<strOne.compare(strOne)<<endl; //0
手写析构函数释放内存
函数解析
strcpy_s()函数解析:
char
* _cdecl
strcpy_s
(
char* _Destination,rsize_t _SizeInBytes,const
char
* _Source);
参数:_Destination为目标字符串,_SizeInBytes标识长度,_Source为原字符串.
strcat_s()函数解析:
errno_t _cdecl
strcat_s
(
char* _Destination,rsize_t _SizeInBytes,const
char
* _Source);
参数:_Destnation为被添加字符串,_SizeInBytes被添加字符串缓冲区大小(允许范围内可以忽略)
,_Source添加的字符串.
memset()函数解析:
void* _cdecl memset(void* _Dst,int _Val,size_t _Size);
参数:_Dst为指针或者数组,_Val为赋给_Dst的值,_Size为_Dst的长度
.
strcmp()函数解析:
int _cdecl strcmp(char const* _Str1,char const* _Str2);
参数:_Str1和_Str2为要比较的字符串
string compare(字符串比较)的缩写,用于比较两个字符串并比较结果返回整数,若_Str1=_Str2,则返回零;若_Str1<_Str2,则返回负数;若_Str1>_Str2,则返回正数.
代码实现
#include<cstring>
class mystring
{
public:
//mystring()
//{
// strSize = 1;
// str = new char;
// *str='\0';
//}; //或者缺省处理
mystring(const char* str="") //需要传常量加const修饰
{
strSize = strlen(str) + 1; //统计长度+1 '\0'
mystring::str = new char[strSize]; //指针 需要给数据成员申请内存
strcpy_s(mystring::str,strSize,str); //拷贝
}
mystring(const mystring& object) //涉及指针申请内存 深拷贝
{
strSize = object.strSize;
str = new char[strSize];
strcpy_s(str, strSize, object.str);
}
char* c_str()
{
return str; //直接返回字符串即可
}
char* data()
{
return str;
}
mystring append(const mystring& object) //返回值为mystring类型
{
mystring temp; //创建临时对象
temp.strSize = mystring::strSize + object.strSize-1;//有两个'\0'需要-1
temp.str = new char[temp.strSize]; //申请内存
memset(temp.str, 0, temp.strSize); //空的不是字符串
strcat_s(temp.str, temp.strSize, str);//需要考虑大小问题(需容纳两个字符串)
strcat_s(temp.str, temp.strSize, object.str);
return temp;
}
int compare(const mystring& object) //比较
{
return strcmp(str, object.str);
}
~mystring() //析构函数
{
delete[] str;
str = nullptr;
}
protected:
char* str; //需要存储字符串
int strSize; //大小
};
int main()
{
{
//1.实现string中创建方式
mystring str1;
mystring str2("ILoveyou");
mystring str3(str1); //如果未缺省,未给数据申请内存,str1没有内存
mystring str4 = str2;
//2.通过实现data和c_str函数 打印字符串
cout << str2.c_str() << endl; //打印ILoveyou
cout << str2.data() << endl; //打印ILoveyou
//3.实现append 实现字符串的链接
mystring strOne = "one";
mystring strTwo = "two";
mystring strThree = strOne.append(strTwo);
cout << strThree.data() << endl; //onetwo
//4.实现字符串比较
cout << strOne.compare(strOne) << endl; //0
}
//5.手写析构函数释放内存
return 0;
}
/*输出*/
ILoveyou
ILoveyou
onetwo
0