鱼C论坛

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

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

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

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

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

x
如题 这个具体该怎么实现呢
最佳答案
2020-12-12 09:35:19
你的需求还是很模糊,自己实现功能吧。

  1. #include <iostream>
  2. #include <string.h>
  3. using namespace std;

  4. class MyClass
  5. {
  6. public:
  7.         MyClass()
  8.         {
  9.                 myString = NULL;
  10.         }

  11.         ~MyClass()
  12.         {
  13.                 if(myString != NULL)
  14.                 {
  15.                         delete myString;
  16.                         myString = NULL;
  17.                 }
  18.         }

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

  25.         MyClass & operator = (const char * str)
  26.         {
  27.                 if(myString != NULL)
  28.                 {
  29.                         delete myString;
  30.                         myString = NULL;
  31.                 }
  32.                
  33.                 myString = new char[strlen(str) + 1];
  34.                 strcpy(myString,str);
  35.                 return *this;
  36.         }
  37.        
  38.         MyClass & operator = (const MyClass & str)
  39.         {
  40.                 if(myString != NULL)
  41.                 {
  42.                         delete myString;
  43.                         myString = NULL;
  44.                 }

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

  49.         MyClass & operator -=(const MyClass & str)
  50.         {
  51.                 //实现你需要的减法功能,你的需求太模糊,不知道怎么帮你实现。
  52.                 //...
  53.                 //
  54.                 return * this;
  55.         }
  56.        
  57.         //重载 "-" 运算符,返回在栈上分配的对象
  58.         friend MyClass operator - (const MyClass & src,const MyClass & dst)
  59.         {
  60.                 MyClass temp = src;
  61.                 temp -= dst;
  62.                 return temp;
  63.         }
  64.        
  65.     friend istream & operator >> (istream & in, MyClass & src)
  66.         {
  67.                 char buffer[1024] = {0};
  68.                 in >> buffer;
  69.                 src = buffer;
  70.                 return in;
  71.         }
  72.    
  73.         friend ostream & operator << (ostream & out, const MyClass & src)
  74.         {
  75.                 if(src.myString != NULL)
  76.                 {
  77.                         out << src.myString;
  78.                 }
  79.                 else
  80.                 {
  81.                         out << "object is not be initialized!";
  82.                 }
  83.                 return out;
  84.         }
  85. private:
  86.         char * myString;
  87. };


  88. int main()
  89. {   
  90.         MyClass a,b;
  91.         cin >> a;
  92.         cin >> b;
  93.         MyClass c = a - b;
  94.         cout << c;
  95.         return 0;        
  96. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

使用道具 举报

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


应该是要判断是否重复 然后减去 如"abcde"-"ce"="abd"
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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


                               
登录/注册后可看大图

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-12 09:35:19 | 显示全部楼层    本楼为最佳答案   
你的需求还是很模糊,自己实现功能吧。

  1. #include <iostream>
  2. #include <string.h>
  3. using namespace std;

  4. class MyClass
  5. {
  6. public:
  7.         MyClass()
  8.         {
  9.                 myString = NULL;
  10.         }

  11.         ~MyClass()
  12.         {
  13.                 if(myString != NULL)
  14.                 {
  15.                         delete myString;
  16.                         myString = NULL;
  17.                 }
  18.         }

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

  25.         MyClass & operator = (const char * str)
  26.         {
  27.                 if(myString != NULL)
  28.                 {
  29.                         delete myString;
  30.                         myString = NULL;
  31.                 }
  32.                
  33.                 myString = new char[strlen(str) + 1];
  34.                 strcpy(myString,str);
  35.                 return *this;
  36.         }
  37.        
  38.         MyClass & operator = (const MyClass & str)
  39.         {
  40.                 if(myString != NULL)
  41.                 {
  42.                         delete myString;
  43.                         myString = NULL;
  44.                 }

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

  49.         MyClass & operator -=(const MyClass & str)
  50.         {
  51.                 //实现你需要的减法功能,你的需求太模糊,不知道怎么帮你实现。
  52.                 //...
  53.                 //
  54.                 return * this;
  55.         }
  56.        
  57.         //重载 "-" 运算符,返回在栈上分配的对象
  58.         friend MyClass operator - (const MyClass & src,const MyClass & dst)
  59.         {
  60.                 MyClass temp = src;
  61.                 temp -= dst;
  62.                 return temp;
  63.         }
  64.        
  65.     friend istream & operator >> (istream & in, MyClass & src)
  66.         {
  67.                 char buffer[1024] = {0};
  68.                 in >> buffer;
  69.                 src = buffer;
  70.                 return in;
  71.         }
  72.    
  73.         friend ostream & operator << (ostream & out, const MyClass & src)
  74.         {
  75.                 if(src.myString != NULL)
  76.                 {
  77.                         out << src.myString;
  78.                 }
  79.                 else
  80.                 {
  81.                         out << "object is not be initialized!";
  82.                 }
  83.                 return out;
  84.         }
  85. private:
  86.         char * myString;
  87. };


  88. int main()
  89. {   
  90.         MyClass a,b;
  91.         cin >> a;
  92.         cin >> b;
  93.         MyClass c = a - b;
  94.         cout << c;
  95.         return 0;        
  96. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-8 17:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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