#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;
}