模仿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等
领取专属 10元无门槛券
私享最新 技术干货