#pragma once
#include<iostream>
#include<assert.h>
using namespace std;
#include<iostream>
#include<assert.h>
using namespace std;
class String
{
public:
String(const char* str = "")
:_size(strlen(str))
{
_capacity = _size;
_str = new char[_capacity + 1];
strcpy(_str, str);
}
void Swap(String& s)
{
swap(_str, s._str);
swap(_size, s._size);
swap(_capacity, s._capacity);
}
String(const String& s)
:_str(NULL)
,_size(0)
,_capacity(0)
{
String tmp(s._str);
Swap(tmp);
}
String& operator=(const String& s)
{
if (this != &s)
{
String tmp(s._str);
Swap(tmp);
}
return *this;
}
~String()
{
if (_str)
{
delete[]_str;
_capacity = _size = 0;
}
}
char* GetStr()
{
return _str;
}
{
public:
String(const char* str = "")
:_size(strlen(str))
{
_capacity = _size;
_str = new char[_capacity + 1];
strcpy(_str, str);
}
void Swap(String& s)
{
swap(_str, s._str);
swap(_size, s._size);
swap(_capacity, s._capacity);
}
String(const String& s)
:_str(NULL)
,_size(0)
,_capacity(0)
{
String tmp(s._str);
Swap(tmp);
}
String& operator=(const String& s)
{
if (this != &s)
{
String tmp(s._str);
Swap(tmp);
}
return *this;
}
~String()
{
if (_str)
{
delete[]_str;
_capacity = _size = 0;
}
}
char* GetStr()
{
return _str;
}
void PushBack(char ch) //插入一个字符
{
if (_size >= _capacity)
{
Expand(_capacity * 2);
}
_str[_size] = ch;
++_size;
_str[_size] ='\0';
{
if (_size >= _capacity)
{
Expand(_capacity * 2);
}
_str[_size] = ch;
++_size;
_str[_size] ='\0';
}
void Append(const char* str) //插入一个字符串
{
size_t n = strlen(str);
if (_size+n > _capacity)
{
Expand(_size + n);
}
strcpy(_str + _size, str);
}
void Append(const char* str) //插入一个字符串
{
size_t n = strlen(str);
if (_size+n > _capacity)
{
Expand(_size + n);
}
strcpy(_str + _size, str);
}
void Insert(size_t pos, char ch)
{
if (_size >= _capacity)
{
Expand(_capacity * 2);
}
_str[pos] = ch;
++_size;
}
void Insret(size_t pos,const char* str)
{
if (_size >= _capacity)
{
Expand(_capacity * 2);
}
_str[pos] = *str;
for (size_t i = 0; i<_size - pos; ++i)
{
_str[_size - pos] = _str[i];
}
++_size;
_size = '\0';
}
void Expand(size_t n) //检测容量
{
if (n > _capacity)
{
char* tmp = new char[n + 1];
strcpy(tmp, _str);
delete[]_str;
_str = tmp;
_capacity = n;
}
}
void PopBack()
{
--_size;
}
void Enrase(size_t pos, size_t n)
{
}
int Find(char ch)
{
for (size_t i = 0; i < _size; ++i)
{
if (_str[_size] == ch)
{
return _size;
}
else
return -1;
}
}
int Find(const char* str)
{
while (_str)
{
char* begin = NULL;
char* end = NULL;
if (begin == end)
{
begin++;
end++;
}
else
return -1;
}
}
char& operator[](size_t index)
{
assert(index < _size);
return _str[index];
}
bool operator<(const String& s)
{
char* str1 = _str;
char* str2 = s._str;
while (*str1 && *str2)
{
if (*str1 < *str2)
{
return true;
}
else if (*str1>*str2)
{
return false;
}
else
{
++str1;
++str2;
}
}
if (*str1 == '\0')
return true;
else
return false;
}
bool operator==(const String& s)
{
char* str1 = _str;
char* str2 = s._str;
while (*str1 && *str2)
{
if (*str1 == *str2)
{
++str1;
++str2;
}
else
{
return false;
}
}
//同时到尾表示相等
if (*str1 == '\0'
&&*str2 =='\0')
{
return true;
}
else
{
return false;
}
}
private:
char* _str;
size_t _size;
size_t _capacity;
};
void TestString()
{
String s1("hello");
String s2(s1);
{
if (_size >= _capacity)
{
Expand(_capacity * 2);
}
_str[pos] = ch;
++_size;
}
void Insret(size_t pos,const char* str)
{
if (_size >= _capacity)
{
Expand(_capacity * 2);
}
_str[pos] = *str;
for (size_t i = 0; i<_size - pos; ++i)
{
_str[_size - pos] = _str[i];
}
++_size;
_size = '\0';
}
void Expand(size_t n) //检测容量
{
if (n > _capacity)
{
char* tmp = new char[n + 1];
strcpy(tmp, _str);
delete[]_str;
_str = tmp;
_capacity = n;
}
}
void PopBack()
{
--_size;
}
void Enrase(size_t pos, size_t n)
{
}
int Find(char ch)
{
for (size_t i = 0; i < _size; ++i)
{
if (_str[_size] == ch)
{
return _size;
}
else
return -1;
}
}
int Find(const char* str)
{
while (_str)
{
char* begin = NULL;
char* end = NULL;
if (begin == end)
{
begin++;
end++;
}
else
return -1;
}
}
char& operator[](size_t index)
{
assert(index < _size);
return _str[index];
}
bool operator<(const String& s)
{
char* str1 = _str;
char* str2 = s._str;
while (*str1 && *str2)
{
if (*str1 < *str2)
{
return true;
}
else if (*str1>*str2)
{
return false;
}
else
{
++str1;
++str2;
}
}
if (*str1 == '\0')
return true;
else
return false;
}
bool operator==(const String& s)
{
char* str1 = _str;
char* str2 = s._str;
while (*str1 && *str2)
{
if (*str1 == *str2)
{
++str1;
++str2;
}
else
{
return false;
}
}
//同时到尾表示相等
if (*str1 == '\0'
&&*str2 =='\0')
{
return true;
}
else
{
return false;
}
}
private:
char* _str;
size_t _size;
size_t _capacity;
};
void TestString()
{
String s1("hello");
String s2(s1);
s1.PushBack('!');
s2.PushBack(' ');
s2.Append("world");
s2.PushBack(' ');
s2.Append("world");
cout << s1.GetStr() << endl;
cout << s2.GetStr() << endl;
cout << s2.GetStr() << endl;
int main()
{
TestString();
return 0;
}
{
TestString();
return 0;
}