比较运算符,即:<、 >、 =、 >=、 <=、!=逻辑上一模一样,只展示其中几个,都用友元来写
选取 >
//>
bool operator > ( const my_string &R, const my_string &L )
{
char *p = R.str;
char *q = L.str;
int temp = 0;
temp = R.len < L.len ? R.len : L.len; //取出较短的值
for(int i=0; i<=temp; i++)
{
char p_1 = *p++; //防止q++在判断条件里让值改变
char q_1 = *q++;
if(p_1 - q_1 < 0)
{
return false;
}else if(p_1 - q_1 > 0)
{
return true;
}
}
return false;
}
选取==
//==
bool operator == ( const my_string &R, const my_string &L )
{
char *p = R.str;
char *q = L.str;
int temp = 0;
if(R.len != L.len) //等于和不等于一样,可以用len直接进行第一次筛选
return false;
temp = R.len; //其后的逻辑于大于小于等相同
for(int i=0; i<=temp; i++)
{
if(*p++ - *q++ != 0) //只有一个if了,故无需取出q++与p++的值
{
return false;
}
}
return true;
}
+运算等同于C语言的strcat函数
my_string operator + (my_string &R, const my_string &L)
{
my_string temp;
temp.str = strcpy((R.str + R.len), L.str); //便宜到\0的位置,调用strcpy
temp.len = R.len + L.len; //修改len值
return temp;
}
[]运算符,是根据下标找元素,不能用友元来写
//[],不能用友元
char &operator [] (int i)
{
return *(str + i);
}