修复表达式;运算符优先级

Fix expression; operator precedence

本文关键字:运算符 优先级 表达式      更新时间:2023-10-16

我正在阅读C++初级读本,第5版学习C++,但我遇到了一个有点困的问题。问题如下:

由于运算符优先级的原因,以下表达式无法计算。你会怎么修?

string s = "word";
string p1 = s + s[s.size() - 1] == 's' ? "" : "s";

我尝试过各种解决方案,但似乎都不明白。我的逻辑是等式运算符需要两个表达式,所以我需要创建它,但我的解决方案不起作用。。非常感谢您的帮助!

通常,您不想将解决方案放在一行中,所以让我们将其分解为单独的部分,这样我们就可以看到为什么它不起作用,我们想要什么以及如何做到这一点。

目前是什么

string s = "word";
string p1 = s + s[s.size() - 1] == 's' ? "" : "s";

表示:

if(s + s[s.size() - 1] == 's')
{
    p1 = "";
}
else
{
    p1 = "s";
}

出了什么问题

现在很清楚为什么这不起作用了,首先我们将字符串(s + s[s.size() -1])与字符s 进行比较

此外,从结果来看,我怀疑这不是你想要的。

修复

相反,如果最后一个字符是而不是一个s,我们希望附加一个"s"。因此,在长格式中:

if(s[s.size() - 1] == 's') // compare the last character
{
    p1 = s + ""; // equivalently = s but for clarity in the next step we'll write it like this
}
else
{
    p1 = s + "s"; // append the s
}

因此,现在我们可以将其浓缩,添加到括号中以获得所需的行为

string p1 = s + (s[s.size() - 1] == 's' ? "" : "s");

我们将某物附加到s,其中某物由s 的最后一个字符确定

我想你想要这样的东西:

string p1 = s + ((s[s.size() - 1] == 's')? "" : "s");

您想要类似以下内容:

string s = "word";
string p1 = s + ((s[s.size() - 1] == 's')? "" : "s");