有没有类似`+=`但是加到字符串前面的字符串操作?
Is there a string operation similar to `+=` but adds to the front of the string?
我知道 x += y
等同于 x = x + y
。有没有等价于x = y + x
的操作?例如,使用此操作组合 x
和 y
,其中 x
和 y
是 "1"
和 "2"
,将使得 x
等于"21"
,不是"12"
?
实现就地前置字符串的最简单方法是什么?
通过使用辅助类型,您可以完成以下工作,其中 x
和 y
是现有类型,例如 std::string
:
x +prefix= y;
此 "named operators" 方法归功于 Yakk,您可以在 https://github.com/klmr/named-operator.
找到更完整的讨论和实施示例
当然,创建您自己的类型和重载运算符 +=
。即:
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;
}
显然问题不在于定义运算符,而在于将一个字符串插入另一个字符串。在这种情况下,std::string
有一大堆 insert
member functions 可以做到这一点。
具体来说,要在字符串 x
的前面插入字符串 y
,您可以使用 x.insert(0, y);
我知道 x += y
等同于 x = x + y
。有没有等价于x = y + x
的操作?例如,使用此操作组合 x
和 y
,其中 x
和 y
是 "1"
和 "2"
,将使得 x
等于"21"
,不是"12"
?
实现就地前置字符串的最简单方法是什么?
通过使用辅助类型,您可以完成以下工作,其中 x
和 y
是现有类型,例如 std::string
:
x +prefix= y;
此 "named operators" 方法归功于 Yakk,您可以在 https://github.com/klmr/named-operator.
找到更完整的讨论和实施示例当然,创建您自己的类型和重载运算符 +=
。即:
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;
}
显然问题不在于定义运算符,而在于将一个字符串插入另一个字符串。在这种情况下,std::string
有一大堆 insert
member functions 可以做到这一点。
具体来说,要在字符串 x
的前面插入字符串 y
,您可以使用 x.insert(0, y);