目录
频道首页
代码逻辑感觉没问题,但结果不对
收藏
0
yezhupeiqi 最近修改于 2023-04-25 19:23:12
详情
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;

我想要实现输出hstr1的结果为00000100000

但是结果却是00000

('根据chatgpt的回答,我修改了如下\n\ncpp\nreturn *this << &str[length] ; \n改为了\n*this << &str[length] ; \nreturn *this ; \n\n\n',) 我也不知道哪里错了,会不会是operator+里面最后一行代码return *this << \&str[length] ;

这个<<并没用生效呢?可是他为什么没有生效呢

+1 -1
1人
0人
邀请回答
添加回答
添加回答
邀请回答
回答
共(2)个回答 排序
mmecold 2023年04月26日

你直接在

hstring& hstring::operator+(int val)
{
    char  str[12]{};  //定义一个字符串数组
    int length = 11;
    do 
    {
        str[length--] = val % 10 + 48;  //把val每个位数的数字依次放入str
    } while (val /= 10);

    // 输出结果 str 看看就可以了
    std::cout<<str;

    return *this << &str[length] ;  //调用<<的重载
}

输出结果 str 看看就可以判断是不是 return *this << \&str[length] ; 的问题了~

添加回复
mmecold 2023年04月26日

你这是C++语言吗?

char  str[12]{};  //定义一个字符串数组

这行代码确定是对的吗?我怎么感觉 C++ 的数组不是这样写的?

添加回复
QuestionBot
z
z
z
z
AI文档
会议室
Git管理
云文档
看板