【问题标题】:Overloading the " - " (minus) operator in c++ to work with a string?在 C++ 中重载“-”(减号)运算符以处理字符串?
【发布时间】:2017-03-14 15:49:00
【问题描述】:

我正在研究如何在 c++ 中使用运算符重载来处理类,但无法在线获得清晰的想法,所以我发布了这个问题。我想基本上重载减号“-”运算符以删除子-来自更大字符串的字符串,.例如第一个字符串是“Hello World”,第二个字符串是“He”,输出应该是“llo World”。

【问题讨论】:

  • 无法在线获得清晰的思路 您是否尝试过寻找有关此主题的教程?因为我真诚地怀疑您找不到任何东西。另外,你尝试了什么?如果没有您的尝试 minimal reproducible example - 这看起来像 为我编写代码 请求。
  • @AlgirdasPreidžius 不是这样,只是因为我是 C++ 的新手并且刚刚进入课程,因此无法使用正确的术语来查找我正在寻找的内容。我只是想学习它的基本语法和想法。不过还是谢谢伙计。
  • 真正的问题是什么?运算符重载 OR 子字符串删除?第一个看this post
  • @slowjoe44 谷歌搜索 c++ 运算符重载教程 为您提供了很多潜在的答案 - 意思是,您在询问 SO 之前没有做任何研究,并且,作为您当前的“问题" 立场 - 它太宽泛,和/或不清楚你到底在问什么。
  • @slowjoe44 你要求两件事。如何重载-,以及如何从字符串中删除字符。为什么不先删除字符呢?

标签: c++ string operator-overloading


【解决方案1】:

尝试以下方法:

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

//prototype
string operator-(string, const string &);

int main()
{
    cout << "Hello World" - "He" << endl;
}

string operator-(string firstOp, const string &secondOp)
{
    //test if the firstOp contains the secondOp
    if (firstOp.find(secondOp) != string::npos)
    {
        //erase the secondOp of the firstOp
        firstOp.erase(firstOp.find(secondOp), secondOp.length());
    }
    return firstOp;
}

//Output: "llo World"

在这里,您为类字符串的 - 运算符声明了一个全局运算符函数。 当编译器找到一个“-”时,他会寻找符合给定签名的运算符函数或方法(这里:const string &,const string &)。 希望能帮到你:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-03
    • 2017-11-04
    • 1970-01-01
    • 2015-11-12
    • 2011-09-29
    • 1970-01-01
    • 2012-09-24
    • 2014-07-06
    相关资源
    最近更新 更多