字符串类的简单实现! (完成部分功能)

  1. strarr.h
#pragma once 
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>
using namespace std;

class strarr
{
public:

	//字符串长度
	int getstrsize();

	//重载=运算符
	strarr& operator=(strarr& str);  //地址传递
	strarr& operator=(const char* str); //指针传递

	//重载[]运算符
	char operator[](int i);

	//重载==运算符
	bool operator==(strarr& str);
	bool operator==(char* str);

	//重载+
	strarr strarr::operator+(const strarr& arr);
	strarr strarr::operator+(const char* str);

	//拷贝构造
	strarr(const strarr& p);

	//有参构造
	strarr(const char* p);

	//析构函数
	~strarr();

	char *m_strarr;
	int strsize;
};


  1. strarr.cpp
#include"strarr.h"

//有参构造
strarr::strarr(const char* str)
{
	this->m_strarr = new char[strlen(str) + 1];

	memset(this->m_strarr, 0, strlen(str) + 1);   //把长度为(strlen(str)+1)的数组元素的值置为0;
	strcpy(this->m_strarr, str);
	this->strsize = strlen(str);
}

//析构函数
strarr::~strarr()
{
	if (this->m_strarr != NULL)
	{
		delete[] this->m_strarr;
 		this->m_strarr = NULL;
	}
}

//字符串长度
int strarr::getstrsize()
{
	return this->strsize;
}

//重载=运算符
strarr& strarr::operator=(strarr& str)
{
	if (this->m_strarr != NULL)
	{
		delete[]this->m_strarr;
		this->m_strarr = NULL;
	}

	this->m_strarr = new char[strlen(str.m_strarr) + 1];
	strcpy(this->m_strarr, str.m_strarr);
	this->strsize = str.strsize;
	cout << this->strsize << endl;

	return *this;
}

strarr& strarr::operator=(const char* str)
{
	//if (this->m_strarr != NULL)
	//{
	//	delete[]this->m_strarr;
	//	this->m_strarr = NULL;
	//}
	this->m_strarr = new char[strlen(str) + 1];
	strcpy(this->m_strarr, str);
	this->strsize = strlen(str) + 1;
	cout << this->strsize << endl;
	return *this;
}

//重载[]运算符
char strarr::operator[](int i)
{
	return this->m_strarr[i]; 
}

//重载== 运算符
bool strarr::operator==(strarr& str)
{
	//strcmp(字符数组1, 字符数组2):①若相等,返回0;②:若字符串1>字符串2,返回值大于0;否则小于0;
	//编译器不同,返回值也会不同:
	//--->一般来讲,返回值为:1、0、-1
	//--->有些会把两个字符的ASCII码之差作为比较结果由函数值返回。

	if (strcmp(this->m_strarr, str.m_strarr) == 0)  
	{
		return true;
	}
	else
	{
		return false;
	}
}

//重载== 运算符
bool  strarr::operator==(char* str)
{
	if (strcmp(this->m_strarr, str) == 0)
	{
		return true;
	}
	else
	{
		return false;
	}
}

//重载+  实现字符串的连接
strarr strarr::operator+(const strarr& arr)
{
	int atrsize = this->strsize + strlen(arr.m_strarr) + 1; //两个字符串的总长度,最后还要‘\0’结束符。
	char* temp = new char[atrsize];  //申请堆区空间
	memset(temp, 0, atrsize);  //赋初值 0

	//strcat():用于字符串的拼接,不适用单个字符的拼接!
	strcat(temp, this->m_strarr);
	strcat(temp, arr.m_strarr);

	strarr mystr(temp); //声明strarr类型的mystr

	delete[] temp;
	temp = NULL;

	return mystr;
}

strarr strarr::operator+(const char* str)
{
	int atrsize = strlen(this->m_strarr) + strlen(str) + 1;
	cout << atrsize << endl;

	char* temp = new char[atrsize];
	memset(temp, 0, atrsize);

	strcat(temp, this->m_strarr);
	strcat(temp, str);

	strarr mystr(temp);

	delete[] temp;
	temp = NULL;
	return mystr;
}
//拷贝构造
strarr::strarr(const strarr& p)
{
	this->m_strarr = new char[strlen(p.m_strarr) + 1];
	memset(m_strarr, 0, strlen(p.m_strarr) + 1);
	strcpy(this->m_strarr, p.m_strarr);
	this->strsize = p.strsize;
}

  1. 字符串类的封装.cpp
#include"strarr.h"

void test()
{
	strarr p1("锄禾日当午,");
	strarr p2("学C真的苦!");
	cout << p1.m_strarr << endl;
	cout << p2.m_strarr << endl;

	strarr p3 = "hua";

	strarr p4 = "hua";

	p3 = "hua";
	
	p3 = p1 + p2;//p3(p1+p2);
	
	cout << p3.m_strarr << endl;

	if (p3 == "hua")
	{
		cout << "相同" << endl;
	}
	else
	{
		cout << "不相同" << endl;
	}
	
	p4 = p3 + "kun";

	cout << p4.m_strarr << endl;
	//cout << p3[3] << endl;
}

int main(){
	test();
	system("pause");
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值