将C++字符串分割成两部分

4

我正在尝试将一个包含"|"的字符串分成两部分。

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"作为右侧。为什么会这样?如何解决?
1个回答

14
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)

又一个比 == 运算符优先级更低的运算符。:p - wilhelmtell
有没有办法将 found 的声明放在 if 语句内部? - neuromancer
@wilhelmtell 不是运算符。正如James McNellis所说,size_t found = ...是一个声明。=是声明语法的一部分,不是运算符。 - James Kanze
@Phenom 不是马上就要这样做。但是除了混淆之外,你为什么想要这样做呢? - James Kanze
3
为了更好的可读性,我建议使用 size_t found = s.find("|"); if(found != string::npos) { ... } - JohannesD
这段代码实际上是 if-else 语句系列的一部分。我认为在使用时声明 found 要比之前声明更好。 - neuromancer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接