【问题标题】:Is there a string operation similar to `+=` but adds to the front of the string?有没有类似`+=`的字符串操作,但是加到字符串的前面?
【发布时间】:2017-01-13 16:35:59
【问题描述】:

我知道x += y 等价于x = x + y。有没有相当于x = y + x的操作。例如,使用此操作组合xy,其中xy"1""2",会使x 等于"21",而不是"12"

实现就地预先设置字符串的最简单方法是什么?

【问题讨论】:

  • 您不能重载基本类型的操作。但是您可以声明一个模拟整数的类,并且对于此类的对象,您可以根据需要重载操作。但是,您可能不会引入新的运营商。您可以重载语言中已经存在的运算符。
  • @NathanOliver 我的意思是字符串!!!我现在要编辑。
  • @theo2003:C++ 中没有任何东西可以阻止您将重载的x += y 实现为x = y + x。这不是一个好习惯,但你可以这样做。这能回答你的问题吗?
  • @AnT 我只是在问是否可以以简单的方式完成(没有重载等)。
  • “没有重载”意味着您正在谈论内置运算符。如果是这样,那么您在谈论什么特定的运算符/类型组合?我不知道任何内置的 += 运算符会依赖于订单?您的字符串文字示例毫无意义:您不能在 C++ 中使用 += 连接字符串文字。

标签: c++ string prepend


【解决方案1】:

显然,问题不在于定义运算符,而在于将一个字符串插入另一个字符串。在这种情况下,std::string 有一大堆 insert member functions 可以这样做。

具体来说,要在字符串x的前面插入字符串y,可以使用x.insert(0, y);

【讨论】:

    【解决方案2】:

    通过使用辅助类型,您可以在xy 是现有类型(如std::string)的情况下进行以下工作:

    x +prefix= y;
    

    这种“命名操作符”方法的功劳归于 Yakk,您可以在 https://github.com/klmr/named-operator 找到更完整的实施示例讨论。

    【讨论】:

    • 谢谢,我只是想知道是否可以使用简单的解决方案,我认为没有快捷操作符会更简单。无论如何,谢谢。
    【解决方案3】:

    当然,创建您自己的类型和重载运算符+=。即:

    struct MyString 
    {
        std::string _string;
    
        MyString(const std::string & str) : _string(str) {}
        MyString(std::string && str) : _string(std::move(str)) { }
    
        void operator+=(const MyString & rhs)
        {
            _string = rhs._string + _string;
        }
    };
    
    int main()
    {
        MyString abc("abc");
        MyString xyz("xyz");
    
        abc += xyz;
    
        std::cout << abc._string;
    }
    

    【讨论】:

    • 我在问是否有可能以一种简单的方式,但无论如何谢谢!
    猜你喜欢
    • 1970-01-01
    • 2018-12-14
    • 2022-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-05
    • 2016-10-02
    相关资源
    最近更新 更多