C++ String 增删查改

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ String 增删查改相关的知识,希望对你有一定的参考价值。

#include <iostream>
using namespace std;
#include <assert.h>
class String
{
public:
 String(char*str="")
 {
  _size = strlen(str);
  _capacity = _size + 1;
  _str = new char[_capacity];
  strcpy(_str, str);
 }
 ~String()
 {
  if (_str)
  {
   delete[]_str;
   _size = 0;
   _capacity = 0;
   _str = NULL;
  }
 }

 void PushBack(char ch)
 {
  CheckCapacity(_size+2);
  _str[_size] = ch;
  _str[++_size] = ‘\0‘;
 }

 void PopBack()
 {
  assert(_size > 0);
  --_size;
  _str[_size] = ‘\0‘;
 }
//插入单个字符

 void Insert(size_t pos, char ch)
 {
  assert(pos <= _size);
  CheckCapacity(_size+2);
  size_t Index = _size;
  while (Index >= pos)
  {
   _str[Index + 1] = _str[Index];
   --Index;
  }
  _str[pos] = ch;
  _size++;
 }
//插入字符串

 void Insert(size_t pos, char*str)
 {
  assert(pos <= _size);
  size_t Index = _size;
  int length = strlen(str);
  CheckCapacity(_size+1+length);
  while (Index >= pos)
  {
   _str[Index + length] = _str[Index];
   --Index;
  }
  
  for (int i = 0; i < length; ++i)
  {
   _str[pos + i] = str[i];
  }
  _size += length;
 }
//查找单个字符
 size_t Find_Ch(char ch)
 {
  size_t length = strlen(_str);
  for (int i = 0; i < length; i++)
  {
   if (_str[i] == ch)
   {
    return i;
   }
  }
  return -1;
 }
//查找子串
 size_t Find_Str(const char*sub)
 {
  size_t SrcSize = _size;
  size_t SubSize = strlen(sub);
  size_t SrcIndex = 0;
  
  
  while (SrcIndex <=_size-SubSize)    
  {
   size_t SubIndex = 0;
   size_t begin = SrcIndex;
   while (begin < SrcSize
    &&SubIndex < SubSize
    &&_str[begin] == sub[SubIndex])
   {
    begin++;
    SubIndex++;
   }
   if (SubIndex == SubSize)
   {
    return SrcIndex;
   }
   SrcIndex++;
  }
  return -1;
 }
 
 void Erase(size_t pos)
 {
  assert(pos);
  for (int i = pos; i < _size-1; ++i)
  {
   _str[i] = _str[i + 1];
  }
  _size--;
  _str[_size] = ‘\0‘;
 }

 String &operator+=( const String& s)
 {
  this->Insert(_size, s._str);
  return *this;
 }

 char*CStr()
 {
  return _str;
 }

private:
 void CheckCapacity(int NeedSize)
 {
  if (NeedSize >= _capacity)
  {
   _capacity = NeedSize>2 * _capacity ?NeedSize:2*_capacity;
   _str = (char*)realloc(_str, _capacity);
  }
 }

private:
 char*_str;
 int _size;
 int _capacity;
};

 

本文出自 “printf的返回值” 博客,请务必保留此出处http://10741125.blog.51cto.com/10731125/1754464

以上是关于C++ String 增删查改的主要内容,如果未能解决你的问题,请参考以下文章

string类的增删查改实现

单链表的增删查改等基本操作C++实现

c++中的顺序表写法,主要实现(增删查改,构造函数,运算符重载)

求C++连接mysql数据库 并同时进行增删查改的代码 十分感谢

c++单链表构造函数运算符重载析构函数增删查改等

c++双链表构造函数运算符重载析构函数增删查改及逆置等