2011-04-30 185 views
3

我試圖拆分一個包含「|」的字符串,分成兩部分。將C++字符串拆分爲兩部分

if (size_t found = s.find("|") != string::npos) 
{ 
    cout << "left side = " << s.substr(0,found) << endl; 
    cout << "right side = " << s.substr(found+1, string::npos) << endl; 

} 

這適用於「a | b」,但與「a | b」一起使用時,它將有「| b」作爲右側。這是爲什麼?這怎麼解決?

回答

13
size_t found = s.find("|") != string::npos 

這是一個聲明;它被解析爲

size_t found = (s.find("|") != string::npos) 

所以,found永遠是10。您需要在條件之外聲明found並使用一些括號:

size_t found; 
if ((found = s.find("|")) != string::npos) 
+0

另一個運算符優先級低於==。 :p – wilhelmtell 2011-04-30 21:44:54

+0

有沒有辦法將發現的聲明放在if語句中? – neuromancer 2011-04-30 21:59:37

+0

@wilhelmtell不是操作員。正如詹姆斯麥克奈利斯所說,「size_t found = ...」是一個聲明。 '='是聲明語法的一部分,不是操作符。 – 2011-04-30 23:02:40