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;
};
时间: 2024-10-12 12:00:29

C++ String 增删查改的相关文章

string类的增删查改实现

string类的默认成员函数.增删查改实现 #include<iostream> #include<assert.h> using namespace std; class String { public: String(char* _str="") //:p_str((char*)malloc(strlen(_str)+1))             //效果一样,但之前没考虑清楚,误打误撞对了,没注意,开辟空间应于_capacity相等 { cout<

EF实现增删查改功能

In the previous tutorial you created an MVC application that stores and displays data using the Entity Framework and SQL Server LocalDB. In this tutorial you'll review and customize the CRUD (create, read, update, delete) code that the MVC scaffoldin

在MVC程序中,使用泛型仓储模式和工作单元实现增删查改

在这片文章中,我将自己动手为所有的实体:写一个泛型仓储类,还有一个工作单元. 工作单元的职责就是:为每一个实体,创建仓储实例.仓储(仓库)的职责:增删查改的功能实现. 我们将会在控制器中,创建工作单元类(UnitOfWork)的实例,然后根据实体,创建仓储实例,再就是使用仓储里面的方法,做操作了. 下面的图中,解释了,仓储和EF 数据上文的关系,在这个图里面,MVC控制器和仓储之间的交互,是通过工作单元来进行的,而不是直接和EF接触. 那么你可能就要问了,为什么要使用工作单元??? 工作单元,就

基于MVC实现增删查改

1.首先要理解MVC的架构.新建一个web项目取名叫Service. 2.建立eneity(实体包),tools(连接数据库),DAO(借助result的代码实现增删查改)servlet(实现跳转). 3.在建立实体时一定要和数据库中的字段名一致,否则在运行时会出错.连接数据库时一定要注意数据库名和密码. 4.在DAO层中实现增删查改的语句,并测试,代码如下: public class userDAO {  public List getAllUser(){//查询 String SQL="se

实现基本的增删查改功能

1. In the previous tutorial you created an MVC application that stores and displays data using the Entity Framework and SQL Server LocalDB. In this tutorial you'll review and customize the CRUD (create, read, update, delete) code that the MVC scaffol

Asp.Net+Oracle+EasyUI简单增删查改

Asp.Net+Oracle+EasyUI简单增删查改 概要:网上有很多关于EasyUI前端框架的资料,本人在学习的基础上,基于自己之前搭建的框架(Oracle+Ado.Net),配合EasyUI实现一套简单的增删查改. 正文: 在实体层新建一个EMP.cs,继承至BaseModel 1 namespace myOracle.Model 2 { 3 public class Emp:BaseModel 4 { 5 public Emp() 6 { 7 base.PrimaryKey = "emp

2015.8.2 jdbc实现商品类的增删查改

在惠普济宁基地进行了两周sql和java的学习,学到很多东西 刚才实现了用jdbc访问数据库对数据库进行操作,是用eclipse写的,过几天移植到NetBeans上,个人还是比较习惯看图形化界面 前几天茫然无头绪的时候闫老师指点迷津了一下,讲了具体的流程,如下: 1.创建项目2.导入相关JAR3.组织项目结构  util:工具类,公共类  po:实体类对象  dao:数据访问  biz:业务类  view:显示 第一步不多陈述 第二步具体如何配置可以参见蔡振华的博客http://qmkkd.bl

Android SQLite最简单demo实现(增删查改)

本来不太想写这篇博客的,但是看到网上的关于android数据库操作的博文都讲得很详细,对于像我这样的新手入门了解SQLite的基本操作有一定难度,所以我参考了网上的一些博客文章,并自己亲自摸索了一遍,希望写出这么一篇博文来记录SQLite的最基本操作,同时也希望能够对android的新手们有些帮助. 参考博客:http://www.20864.com/201247/274.html 这里只是一个示范性的demo,并没实现什么具体功能,只实现了对数据库的增删查改操作. 以下是实现demo的步骤:

4.CRUD Operations Using the Repository Pattern in MVC【在MVC中使用仓储模式进行增删查改】

原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/crud-using-the-repository-pattern-in-mvc/ 上一篇文章,讲到了MVC中基本的增删查改,这篇文章,我会继续说到,使用仓储模式,进行增删查改. 什么是仓储模式呢,我们先来了解一下:  仓储模式是为了在程序的数据访问层和业务逻辑层之间创建一个抽象层,它是一种数据访问模式,提供了一种更松散耦合的数据访问方法.我们把创建数据访问的逻辑代码写在单独的类中,或者类库中