半夏微澜ぺ871 2022-04-27 07:22 采纳率: 100%
浏览 33
已结题

关于#BUG#的问题,如何解决?

#include<iostream>
#include<cstring>
using namespace std;

class String
{
private:
    char* head;
public:
    String();
    String(char* s);
    String(String &s);
    ~String();
    String& operator=(char* s);
    String& operator=(String &s);
    String operator+=(String &s);
    String& operator+(String &s);
    bool operator==(String &s);
    bool operator<(String &s);
    char& operator[](int index);
    int Length();
    friend istream& operator>>(istream &is,String &s);
};
    String::String()
    {
        head=new char[1];
        *head=0;
    }
    String::String(char* s)
    {
        int i=strlen(s);
        head=new char[i+1];
        strcpy(head,s);
    }
    String:: String(String &s)
    {
        int i=strlen(s.head);
        head=new char[i+1];
        strcpy(head,s.head);
    }
    String:: ~String() {delete[]head;}
    String& String::operator=(char* s)
    {
        int len=strlen(s);
        char* newhead=new char[len+1];
        strcpy(newhead,s);
        delete[]head;
        head=newhead;
        return *this;
    }
    String& String::operator=(String &s)
    {
        int len=strlen(s.head);
        char* newhead=new char[len+1];
        strcpy(newhead,s.head);
        delete[]head;
        head=newhead;
        return *this;
    }
    String String::operator+=(String &s)
    {
        int len=strlen(head)+strlen(s.head);
        char* newhead=new char[len+1];
        strcpy(newhead,head);
        strcat(newhead,s.head);
        delete[]head;
        head=newhead;
        return *this;
    }
    String& String::operator+(String &s)
    {
        int len=strlen(head)+strlen(s.head);
        char* newhead=new char[len+1];
        strcpy(newhead,head);
        strcat(newhead,s.head);
        String temp;
        delete[]temp.head;
        temp.head=newhead;
        return temp;
    }
    bool String::operator==(String &s)
    {
        if(strcmp(head,s.head)==0) return true;
        else return false;
    }
    bool String::operator<(String &s)
    {
        if(strcmp(head,s.head)<0) return true;
        else return false;
    }
    char& String::operator[](int index)
    {
        return head[index];
    }
    int String::Length()
    {
        return strlen(head);
    }
    ostream& operator<<(ostream &os,String &s)
    {
        int i;
        for(i=0;s[i];i++) os<<s[i];
        return os;
    }
    istream& operator>>(istream &is,String &s)
    {
        char c[100];
        delete[]s.head;
        s.head=new char[100];
        cin>>c;
        strcpy(s.head,c);
        return is;
    }

int main()
{
    String s1("Help!"),s2("Good!"),s3(s2),s4,s5;
    cout<<"s1="<<s1<<endl;
    s3="Hello!";
    cout<<"s3="<<s3<<endl;
    s3+=s2;
    cout<<"s3="<<s3<<endl;
    cin>>s4;
    cout<<"s4="<<s4<<endl;
    s5=s3+s4;
    cout<<"s5="<<s5<<endl;
    s5[0]='g';
    cout<<"s5="<<s5<<endl;
    cout<<"strlen(s5)="<<s5.Length()<<endl;
    cout<<boolalpha<<(s3==s1)<<endl;
    cout<<boolalpha<<(s3<s1)<<endl;
    return 0;
}

运行结果
s1=Help!
s3=Hello!
s3=Hello!Good!
dgsciuwgi
s4=dgsciuwgi

展开全部

  • 写回答

2条回答 默认 最新

  • 无夜_ 2022-04-27 11:49
    关注

    检查运算符重载

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 5月17日
  • 已采纳回答 5月10日
  • 创建了问题 4月27日

悬赏问题

  • ¥15 Open GL ES 的使用
  • ¥15 有人说Java多线程性质是非计算机科班硕士不懂的?
  • ¥15 我如果只想表示节点的结构信息,使用GCN方法不进行训练可以吗
  • ¥15 GPTs营销指令提示词和创建方案
  • ¥15 QT6将音频采样数据转PCM
  • ¥15 本地安装org.Hs.eg.dby一直这样的图片报错如何解决?
  • ¥15 下面三个文件分别是OFDM波形的数据,我的思路公式和我写的成像算法代码,有没有人能帮我改一改,如何解决?
  • ¥15 Ubuntu打开gazebo模型调不出来,如何解决?
  • ¥100 有chang请一位会arm和dsp的朋友解读一个工程
  • ¥50 求代做一个阿里云百炼的小实验
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部