我正在阅读C ++ Primer,第5版学习C ++但是我遇到了一个问题,我有点困惑。问题如下:
由于运算符优先级,以下表达式无法计算。 你会如何解决它?
string s = "word"; string p1 = s + s[s.size() - 1] == 's' ? "" : "s";
我尝试了各种解决方案,但我似乎无法得到它。我的逻辑是,相等运算符需要两个表达式,所以我需要创建它,但我的解决方案不起作用..非常感谢任何帮助!
答案 0 :(得分:1)
一般情况下,您不希望将您的解决方案放在一行中,所以我们将其分解为单个部分,以便我们可以看到它为什么不起作用,我们想要什么以及我们如何做到这一点
目前的情况
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'。所以长篇:
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
答案 1 :(得分:0)
我认为你想要这样的东西:
string p1 = s + ((s[s.size() - 1] == 's')? "" : "s");
答案 2 :(得分:0)
你想要这样的东西:
string s = "word";
string p1 = s + ((s[s.size() - 1] == 's')? "" : "s");