修复表达;运算符优先级

时间:2013-12-10 14:23:29

标签: c++ operator-keyword operator-precedence associativity

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

  

由于运算符优先级,以下表达式无法计算。   你会如何解决它?

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

我尝试了各种解决方案,但我似乎无法得到它。我的逻辑是,相等运算符需要两个表达式,所以我需要创建它,但我的解决方案不起作用..非常感谢任何帮助!

3 个答案:

答案 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");