二、String串运算的实现
这里举String串的创建算子,拼接算子,和赋值算子为例,说明String串运算的实现。
创建算子(constructor)
String::String(char *s)
{ //
先要确定新创字符串实际需要的存储空间,s的类型为(char *),作为新创字符串的初值。 // 确定s的长度,用标准字符串函数strlen(s)计算长度 size = strlen(s) ; //
然后,在动态存储区域开辟一块空间,用于存储初值s,把结束字符也包括进来 str = new char [size+1];
}
拼接算子
String String::operator+ (String& s)
{ // 把字符串s和本实例拼接成为一个长串返回 String temp; //创建一个串temp int len;
// 准备工作,计算拼接后的长串的长度 len = size + s.size;
// 把temp串创建时申请的存储空间全部释放 delete [] temp.str;
// 准备工作,开辟空间,为存放长串之用 temp.str= new char [len+1];
// 若开辟动态存储空间不成功,则退出 assert(temp.str!= 0); temp.size =
len;
// 字符串str(以’\0’结尾)存到temp strcpy(temp.str, str);
// 再把参数s的str和本实例的str拼接为长串 strcat(temp.str, s.str); return temp;
}
赋值算子
String String::operator=
(String& s)
{
// 参数s将被赋值到本串
// 若本串的串长和s的串长不同,则应该释放本串的
// str存储空间,并开辟新的空间 if (size !=
s.size) {
delete [] str ; // 释放原存储空间 str = new char [s.size+1];
// 若开辟动态存储空间失败,则退出正常运行 assert(str != 0); size = s.size; } strcpy(str , s.str );
// 返回本实例,作为String类的一个实例 return *this;
} |