上次由于临时有事就匆匆结束了“自己动手写string类”,下来就继续我们的“自己动手写string类”。
我们都知道可以直接进行这样的操作:str1 > str2; str1< str2; str1==str2等,其实我们只要对这些符号进行重载,就可以很方便的使用它了。如下:
重载运算符 >
friend bool operator>(const String& s1,const String& s2)
{
if(strcmp(s1.str, s2.str) > 0) //比较两字符串,大于返回真,否则返回假
return 1;
else
return 0;
}
同理,
friend bool operator>(const String& s1,const String& s2)
{
if(strcmp(s1.str, s2.str) < 0) //比较两字符串,小于返回真,否则返回假
return 1;
else
return 0;
}
friend bool operator>(const String& s1,const String& s2)
{
if(strcmp(s1.str, s2.str) == 0) //比较两字符串,相等返回真,否则返回假
return 1;
else
return 0;
}
两个字符串还可以相加, 如 str3 = str1+ str2;
String operator+( const String& s)
{
int total = len + s.getlen(); //把相加后的字符串的长度保存在total中;
String temp(total); //对象初始化长度,这里会调用下面的构造函数String(unsigned int len1) ;
int i, j ;
for(i=0; i < len; i++)
temp[i] = str[i] ; //把字符串1先保存到temp中
for(j=0; j < s.getlen(); j++,i++)
temp[i] = s[j]; //再把字符串2接着保存在后面
temp[total] = '\0';
return temp;
}
这里我们再写一个构造函数
String(unsigned int len1) {
len = len1;
str = new char[len1+1];
int i;
or(i=0; i<=len1; i++)
str[i] = '\0';
}
还要补充一个去字符串大小的函数
int getlen()const
{
return len;
}
因为我们的动态申请内存空间的,所以在对象结束它的生命期的时候应该释放其占有的内存,我们写一个析构函数来完成这样的功能。
~String()
{
delete []str;
len = 0;
}
到此,String类的最基本功能就算完成了,但string类本身远远不止这些功能。之所以自己动手写String类一是为了练手,二是希望很朋友们交流!!好吧,今天就到这里咯!!
如有不对或欠缺的地方,请大家不吝赐教,我不胜感激!!