2012-10-22 72 views
-4

如果我有Python中的字符串x='wow',我使用__add__功能可以连接此字符串本身,就像这样:简单的字符串连接

x='wow' 
x.__add__(x) 
'wowwow' 

我怎样才能在C++中做到这一点?

+5

'x + = x;'?这实际上非常直观。 – chris

+0

这是一个微不足道的问题。 – jogojapan

+1

(1)所有四个答案都是错误的,(2)问题的结束是错误的。天啊。 –

回答

7

语义上说,你的Python代码相当于将类似

std::string x = "wow"; 
x + x; 

即创建一个临时的字符串,它是xx串联和扔掉的结果。要追加到x你会做到以下几点:

std::string x = "wow"; 
x += x; 

注意双引号"。与python不同,在C++中,单引号用于单个字符,用空字符串结尾的双引号。

看到这个std::string参考。

顺便说一下,在Python中,您通常不会调用__add__()方法。你会使用等效语法第一C++例如:

x = 'wow' 
x + x 

__add__()方法仅仅是一个类,它提供一个“加”运算符的蟒蛇方式。

+0

谢谢,这很有用 –

+0

问题是'__add__',它是C++中的'+',而不是'+ ='。 –

+0

@daknøk我明白你的观点。标题说“附加到字符串”,但代码连接两个字符串并返回结果。我会解决我的例子。 – juanchopanza

3

您可以使用std::stringoperator+operator+=std::stringstreamoperator <<

std::string x("wow"); 
x = x + x; 
//or 
x += x; 

还有std::string::append

+0

谢谢,这很有用 –

1
std::string x = "wow" 
x = x + x; 
3

可以使用+运算符连接字符串在C++:

std::string x = "wow"; 
x + x; // == "wowwow" 

在Python中,你也可以使用+代替__add__(和+被认为比.__add__更Python):

x = 'wow' 
x + x # == 'wowwow' 
+0

因此,在C++中,Python的'x .__ add __(x)'相当于'operator +(x,x)',对吧?只是我不确定''''''''字符串是不是一个成员。 _Sigh._) – sbi

+0

@sbi yes,Python的'__add__'等同于C++的'operator +'。 –

-2

通常,在连接两个不同的字符串时,可以简单地使用operator+=上要追加的字符串:

string a = "test1"; 
string b = "test2"; 

a += b; 

将正确产生a=="test1test2"

然而,在这种情况下,你不能简单地添加一个字符串本身,因为附加的改变行为源和目的地。换句话说,这是不正确的:

string x="wow"; 
x += x; 

相反,一个简单的解决方法就是建立一个临时(详细为清楚起见):

string x = "wow"; 
string y = x; 
y += x; 

...然后交换回:

x = y; 
+0

为什么'x + = x'不正确?标准*要求*它的工作。 –

+0

@ R.MartinhoFernandes:哪里? –

+1

运算符+ =的作用与第21.4.6.2/9节中描述的带有char const *和大小的append函数相同。这是以任何有效的方式措辞。 –