2011-04-30 122 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