鱼C论坛

 找回密码
 立即注册
查看: 1768|回复: 4

[已解决]如何重载减法运算符,实现两个字符串相减,并给出主函数应用该类

[复制链接]
发表于 2020-12-11 11:40:41 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
如题 这个具体该怎么实现呢
最佳答案
2020-12-12 09:35:19
你的需求还是很模糊,自己实现功能吧。
#include <iostream>
#include <string.h>
using namespace std;

class MyClass
{
public:
        MyClass()
        {
                myString = NULL;
        }

        ~MyClass()
        {
                if(myString != NULL)
                {
                        delete myString;
                        myString = NULL;
                }
        }

        //因为要返回在栈上的对象,必须重载拷贝构造函数
        MyClass(const MyClass & str)
        {
                myString = NULL;
                *this = str;
        }

        MyClass & operator = (const char * str)
        {
                if(myString != NULL)
                {
                        delete myString;
                        myString = NULL;
                }
                
                myString = new char[strlen(str) + 1];
                strcpy(myString,str);
                return *this;
        }
        
        MyClass & operator = (const MyClass & str)
        {
                if(myString != NULL)
                {
                        delete myString;
                        myString = NULL;
                }

                myString = new char[strlen(str.myString) + 1];
                strcpy(myString,str.myString);
                return *this;
        }

        MyClass & operator -=(const MyClass & str)
        {
                //实现你需要的减法功能,你的需求太模糊,不知道怎么帮你实现。
                //...
                //
                return * this;
        }
        
        //重载 "-" 运算符,返回在栈上分配的对象
        friend MyClass operator - (const MyClass & src,const MyClass & dst)
        {
                MyClass temp = src;
                temp -= dst;
                return temp;
        }
        
    friend istream & operator >> (istream & in, MyClass & src)
        {
                char buffer[1024] = {0};
                in >> buffer;
                src = buffer;
                return in;
        }
    
        friend ostream & operator << (ostream & out, const MyClass & src)
        {
                if(src.myString != NULL)
                {
                        out << src.myString;
                }
                else
                {
                        out << "object is not be initialized!";
                }
                return out;
        }
private:
        char * myString;
};


int main()
{   
        MyClass a,b;
        cin >> a;
        cin >> b;
        MyClass c = a - b;
        cout << c;
        return 0;        
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-12-11 13:10:14 | 显示全部楼层
你没说清楚你想要实现什么
两个字符串怎么相减,你要说清楚啊。你不说清楚,别人怎么帮你?
比如两个字符串a="abcdefghijklmn",b="def",对于a-b,你想得到什么?
得到"abchijklmn",还是得到"abcdefghijk",还是得到11,还是得到其他的什么结果?
提问的时候要说清楚你的问题,否则别人如何帮你
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-11 15:17:51 | 显示全部楼层
本帖最后由 Ryan_Li 于 2020-12-11 15:22 编辑
sunrise085 发表于 2020-12-11 13:10
你没说清楚你想要实现什么
两个字符串怎么相减,你要说清楚啊。你不说清楚,别人怎么帮你?
比如两个字符 ...


应该是要判断是否重复 然后减去 如"abcde"-"ce"="abd"
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-11 15:21:01 | 显示全部楼层
sunrise085 发表于 2020-12-11 13:10
你没说清楚你想要实现什么
两个字符串怎么相减,你要说清楚啊。你不说清楚,别人怎么帮你?
比如两个字符 ...


                               
登录/注册后可看大图

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-12 09:35:19 | 显示全部楼层    本楼为最佳答案   
你的需求还是很模糊,自己实现功能吧。
#include <iostream>
#include <string.h>
using namespace std;

class MyClass
{
public:
        MyClass()
        {
                myString = NULL;
        }

        ~MyClass()
        {
                if(myString != NULL)
                {
                        delete myString;
                        myString = NULL;
                }
        }

        //因为要返回在栈上的对象,必须重载拷贝构造函数
        MyClass(const MyClass & str)
        {
                myString = NULL;
                *this = str;
        }

        MyClass & operator = (const char * str)
        {
                if(myString != NULL)
                {
                        delete myString;
                        myString = NULL;
                }
                
                myString = new char[strlen(str) + 1];
                strcpy(myString,str);
                return *this;
        }
        
        MyClass & operator = (const MyClass & str)
        {
                if(myString != NULL)
                {
                        delete myString;
                        myString = NULL;
                }

                myString = new char[strlen(str.myString) + 1];
                strcpy(myString,str.myString);
                return *this;
        }

        MyClass & operator -=(const MyClass & str)
        {
                //实现你需要的减法功能,你的需求太模糊,不知道怎么帮你实现。
                //...
                //
                return * this;
        }
        
        //重载 "-" 运算符,返回在栈上分配的对象
        friend MyClass operator - (const MyClass & src,const MyClass & dst)
        {
                MyClass temp = src;
                temp -= dst;
                return temp;
        }
        
    friend istream & operator >> (istream & in, MyClass & src)
        {
                char buffer[1024] = {0};
                in >> buffer;
                src = buffer;
                return in;
        }
    
        friend ostream & operator << (ostream & out, const MyClass & src)
        {
                if(src.myString != NULL)
                {
                        out << src.myString;
                }
                else
                {
                        out << "object is not be initialized!";
                }
                return out;
        }
private:
        char * myString;
};


int main()
{   
        MyClass a,b;
        cin >> a;
        cin >> b;
        MyClass c = a - b;
        cout << c;
        return 0;        
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 09:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表