#include<iostream>
#include<stdlib.h>
#include<assert.h>
using namespace std;
class String
{
public:
String(const char* str)
:_str(new char[strlen(str) + 1])
{
_size = strlen(str);
_capacity = _size + 1;
strcpy(_str, str);
}
String(const String& s)
:_str(NULL)
{
String tmp(s._str);
swap(_str, tmp._str);
}
~String()
{
if (_str)
{
delete[] _str;
_size =0;
_capacity =0;
_str = NULL;
}
}
//插入单个字符
void Insert(char ch, size_t pos)
{
assert(pos <= _size);
CheckCapacility();
size_t begin = _size;
while (begin >= pos)
{
_str[begin + 1] = _str[begin];
begin--;
}
_str[pos] = ch;
++_size;
}
//插入字符串
/*void Insert(size_t pos, const char* s1)
{
assert(pos <= _size);
int len = strlen(s1);
CheckCapacility(_size+len+1);
size_t begin = _size;
while (begin >= pos)
{
_str[begin + len] = _str[begin];
--begin;
}
for (int i = 0; i < len;i++)
{
_str[pos++] = s1[i];
}
}
char* Cstr()
{
return _str;
}
private:
void CheckCapacility(int Needlen)
{
if (Needlen >= _capacity)
{
_capacity = Needlen > 2 * _capacity ? Needlen : 2 * _capacity;
_str = (char*)realloc(_str, _capacity);
}
}
private:
char* _str;
int _size;
int _capacity;
};
void Test()
{
String s("helorld,hello bit!");
s.Insert(3,"lo w");
cout << s.Cstr() << endl;
}
int main()
{
Test();
system("pause");
return 0;
}
转载于:https://blog.51cto.com/10740184/1739059