#2
后卿2023-04-25 16:40
|
程序代码:
class hstring
{
private:
unsigned short usmlen{}; //新建的内存长度
char* cstr; //字符串
unsigned short uslen; //字符串长度
}
hstring::hstring()
{
cstr = NULL; //指针初始化
usmlen = 0x32; //给予usmlen一个初始值,不然进入copystr函数后,无法与len进行比较
uslen=0;
}
void hstring::copystr(char*& dest, const char* source)//这个copystr应该是没问题的,所以这整个函数没必要
//看
{
unsigned short len = getlength(source);
if (len > usmlen)
{
dest = new char[len]; //重新分配内存
uslen = len;
}
else
{
uslen = len;
dest = new char[usmlen];
}
memcpy(dest, source, len);
dest[len] = 0;
}
hstring::hstring(const char* _str) :hstring()
{
copystr(cstr, _str);
}
unsigned short hstring::getlength(const char* str)
{
unsigned short len{};//len局部变量
for (; str[len]; len++); //len包括了末尾0的长度
return len; //for循环计算出len的长度,返回它的值,即字符串str的长度
}
hstring& hstring::operator<<(const hstring& hstr)
{
unsigned short hstrlen = getlength(hstr.cstr);//hstrlen表示传入的对象的字符串长度
char* tempmem = cstr; //先将cstr保存一份
if (hstrlen + uslen > usmlen) //uslen表示本对象的字符串长度
{ //如果内存不够就扩充内存
cstr = new char[hstrlen + uslen]; //cstr表示本字符串
memcpy(cstr, tempmem, uslen);
}
else
{
cstr = new char[0x32];
memcpy(cstr, tempmem, uslen);
}
memcpy(cstr+uslen, hstr.cstr, hstrlen+1);//将传入的对象的字符串保存到本对象的字符串后面
uslen = uslen + hstrlen - 1;//更新本对象的字符串长度
return *this;
}
hstring& hstring::operator+(int val)
{
char str[12]{}; //定义一个字符串数组
int length = 11;
do
{
str[length--] = val % 10 + 48; //把val每个位数的数字依次放入str
} while (val /= 10);
return *this << &str[length] ; //调用<<的重载
}
为什么我写
hstring hstr1="00000";
hstr1=hstr1+100000; //调用operator+
std::cout<<hst1;
结果出不来呢,结果还是0000