c++封装string类、strcpy_s()、strcat_s()、memset()、strcmp()函数解析

实现功能

实现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
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qiuqiuyaq

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值