首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

模仿C+的string实现一个字符串String类

模仿C++的string实现一个字符串String类

1. C++string 类的例子

#include

#include

usingstd::string;

usingstd::endl;

usingstd::cout;

intmain(){

stringstr,str2("hello"),str3="world";

cout

stringstr4(str2);

cout

str2+=str3;

cout

str=str2+"---**=== "+str3;

cout

str[]='H';

cout

str.append("jjjjj");

cout

str.push_back('P');

cout

str+=str2;

cout

str+="Student";

cout

intpos=str.find('o');

cout

pos=str.find('o',pos+1);

cout

stringstr4=str.substr(2,5);

cout

str.insert(3,"-taihu-");

cout

str.insert(2,"-xueyuan-",3,2);

cout

str.erase(str.begin()+2,str.end());

cout

return;

}

2. 实现自己的字符串String类

将string例子程序中的字符串类型换成自己的String就可以写一个String的测试程序,例如

#include

//#include

//using std::string;

#include "String.h"

usingstd::endl;

usingstd::cout;

intmain(){

Stringstr,str2("hello"),str3="world";

cout

Stringstr4(str2);

cout

str2+=str3;

cout

str=str2+"---**=== "+str3;

cout

str[]='H';

cout

#if 0

str.append("jjjjj");

cout

str.push_back('P');

cout

str+=str2;

cout

str+="Student";

cout

intpos=str.find('o');

cout

pos=str.find('o',pos+1);

cout

stringstr4=str.substr(2,5);

cout

str.insert(3,"-taihu-");

cout

str.insert(2,"-xueyuan-",3,2);

cout

str.erase(str.begin()+2,str.end());

cout

#endif

return;

}按照上面的测试程序,我们的String类应该有:带默认参数的构造函数、拷贝构造函数等其他函数,应该重载运算符

// String类的头文件,比如叫做"String.h"

#pragma once

#include

#include

classString

{

char*data;

intsize_;

public:

String(constchar*s=nullptr);

String(constString&s);

intsize(){returnsize_;}

constcharoperator[](inti)const{returndata[i]; }

char&operator[](inti){returndata[i]; }

String&operator+=(constString&s);

friendstd::ostream&operator

friendStringoperator+(constString&str1,constString&str2);

};

// String类的源程序文件,比如叫做"String.cpp"

#include "String.h"

String::String(constchar*s){

if(s==nullptr){data=nullptr;size_=;return;}

size_=strlen(s);

data=newchar[size_+1];

if(!data){size_=;return;}

for(inti=;i

data[i]=s[i];

data[size_]='\0';

}

std::ostream&operator

if(str.data)

out

returnout;

}

String::String(constString&s){

if(s.data==nullptr){data=nullptr;size_=;return;}

size_=s.size_;

data=newchar[size_+1];

if(!data){size_=;return;}

for(inti=;i

data[i]=s.data[i];

data[size_]='\0';

}

String&String::operator+=(constString&s){

intnew_size=size_+s.size_;

char*p=newchar[new_size+1];

if(!p)return*this;

for(inti=;i

for(inti=;i

p[new_size]='\0';

size_=new_size;

delete[]data;

data=p;

return*this;

}

Stringoperator+(constString&str1,constString&str2){

Strings(str1);

s+=str2;

returns;

}可以在此基础上,继续实现其他的各种对String类对象的操作函数(成员函数或外部函数形式),比如: substr、append、push_back、insert、erase等

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180514G1OIUB00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券