2012-10-22 75 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函數相同。這是以任何有效的方式措辭。 –