string类的实现

#define  _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <algorithm>
#include <set>
#include <string>
#include <iterator>
#include <vector>
#include <cstdlib>
//using namespace std;

//template<class T>
//struct display
//{
//	void operator()(const T& x) {
//		cout << x << " ";
//	}
//};
//
//class MyAllocator
//{
//public:
//	struct obj { obj* next; };
//public:
//	void* allocate(size_t size)
//	{
//		obj* p;
//		if (!freeStore)
//		{
//			size_t chunk = size * CHURNK;
//			freeStore = p = (obj*)malloc(chunk);
//			for (int i = 0; i < CHURNK - 1; i++)
//			{
//				p->next = (obj*)((char*)p + size);
//				p = p->next;
//			}
//			p->next = nullptr;
//		}
//		p = freeStore;
//		freeStore = freeStore->next;
//		return p;
//	}
//
//	void deallocate(void* p, size_t)
//	{
//		((obj*)p)->next = freeStore;
//		freeStore = (obj*)p;
//	}
//private:
//	obj* freeStore = nullptr;
//	const int CHURNK = 5;
//};
//
//class Foo
//{
//public:
//	int ccc;
//	static MyAllocator myAlloc;
//	static void * operator new(size_t size)
//	{
//		return myAlloc.allocate(size);
//	}
//	static void operator delete(void* p, size_t)
//	{
//		return myAlloc.deallocate(p, (0));
//	}
//};
//MyAllocator Foo::myAlloc;
//
//int a = 0;
//void ddddd()
//{
//	static int a = 10;
//	a++;
//	cout << a << endl;
//}
//void operator delete(void* p)
//{
//	cout << "我是部带size的" << endl;
//}
//void operator delete(void* p, size_t size)
//{
//	cout << "ddddddddddd" << endl;
//	cout << size << endl;
//	cout << "我是带size的" << endl;
//}
//struct MyStruct
//{
//	int x;
//};
//struct wode
//{
//	struct MyStruct sss;
//};
//int calFaci(int n)
//{
//	int sum = 1;
//	for (int i = 1;i < n + 1;i++)
//	{
//		sum *= i;
//	}
//	cout << sum << endl;
//	int ii = 0;
//	while (sum>0)
//	{
//		sum = sum / 10;
//		ii++;
//	}
//	return ii;
//}
#include <iostream>
#include <cstdlib>
#include <algorithm>
#include <string.h>
class string
{
public:

	string(const char* src = NULL)
	{
		//TODO1:构造函数
		//开始添加代码
		if (src != NULL)
		{
			m_length = strlen(src);
			m_data = new char[m_length + 1];
			strcpy(this->m_data, src);
		}
		else {
			m_data = new char[1];
			*m_data = '\0';
			m_length = 0;
		}
		//结束添加代码
	}

	~string()
	{
		//TODO2:析构函数
		//开始添加代码
		if (m_data != NULL)
		{
			delete[] m_data;
			m_data = NULL;
		}
		//结束添加代码
	}

	int size() const
	{
		return m_length;
	}

	const char *c_str() const
	{
		return m_data;
	}

	string(const string &src)
	{
		//TODO3:拷贝构造函数
		//开始添加代码
		this->m_length = src.m_length;
		this->m_data = new char[this->m_length + 1];
		strcpy(this->m_data, src.m_data);
		//结束添加代码
	}

	string operator+(const string &src) const
	{
		string ret = *this;
		//TODO4:运算符+
		//开始添加代码
		ret += src;
		//结束添加代码
		return ret;
	}

	string& operator+=(const string &src)
	{
		//TODO5:运算符+=
		//开始添加代码
		int len = this->m_length + src.m_length + 1;
		this->m_length = this->m_length + src.m_length;
		char* pdata = new char[len];
		memset(pdata, 0, len);
		strcat(pdata, this->m_data);
		strcat(pdata, src.m_data);
		delete[](this->m_data);
		this->m_data = pdata;
		
		//结束添加代码
		return *this;
	}

	bool operator==(const string &str) const
	{
		//TODO5:运算符==
		//开始添加代码
		return (!strcmp(this->m_data, str.m_data));
		//结束添加代码
	}

	void Reverse()
	{
		//TODO5:字符串反转
		//开始添加代码
		for (int i = 0, j = m_length - 1; i < j; i++, j--)
		{
			char c = this->m_data[i];
			this->m_data[i] = this->m_data[j];
			this->m_data[j] = c;
		}
		//结束添加代码
	}

	void Sort()
	{
		//TODO6:字符串从小到大排序
		//开始添加代码
		std::sort(this->m_data, this->m_data + this->m_length);
		//结束添加代码
	}
public:
	char *m_data;
	int m_length;
};

int main(int argc,char *agrv[])
{
	//构造函数
	string str1 = "abcde";
	string str2("12345");
	//拷贝构造函数
	string str3 = str1;
	std::cout << (str3 == str1) << std::endl;

	//拷贝构造函数
	string str4(str2);
	std::cout << (str2 == str4) << std::endl;
	//+ 运算符
	 str1 += str2;
	
	// //构造函数
	// string str1 = "abcde";
	// string str2("12345");

	// //拷贝构造函数
	// string str3 = str1;
	// std::cout << (str3 == str1) << std::endl;

	// //拷贝构造函数
	// string str4(str2);
	// std::cout << (str2 == str4) << std::endl;

	// //+ 运算符
	 string str5 = str1 + str2;
	 std::cout << str5.m_data << std::endl;
	// std::cout << (str5 == "abcde12345") << std::endl;
	// std::cout << (str5.size() == str1.size() + str2.size()) << std::endl;

	// //+= 运算符
	// str5 += str1;
	// std::cout << (str5 == "abcde12345abcde") << std::endl;

	// //反转
	// string str6 = "12345678";
	 str5.Reverse();
	 std::cout << str5.m_data << std::endl;
	// std::cout << (str6 == "87654321") << std::endl;

	// //排序
	// string str7 = "202008131617";
	 str5.Sort();
	 std::cout << str5.m_data << std::endl;
	// std::cout << (str7 == "000111223678") << std::endl;
	// return 0;
	system("pause");
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值