string的增删查改

来源:互联网 发布:蜂窝移动数据无法清零 编辑:程序博客网 时间:2024/03/28 16:38
#pragma once
#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;
 }
 void PushBack(char ch)        //插入一个字符
 {
  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 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);
 s1.PushBack('!');
 s2.PushBack(' ');
 s2.Append("world");
 cout << s1.GetStr() << endl;
 cout << s2.GetStr() << endl;


int main()
{
 TestString();
 return 0;
}
原创粉丝点击