我正在阅读 C++ Primer, 5th Edition 来学习 C++,但是我遇到了一个我有点卡住的问题。问题如下:
由于运算符优先级,以下表达式无法计算。你会如何解决它?
string s = "word"; string p1 = s + s[s.size() - 1] == 's' ? "" : "s";
我尝试了各种解决方案,但我似乎无法得到它。我的逻辑是相等运算符需要两个表达式,所以我需要创建它,但我的解决方案不起作用。非常感谢任何帮助!
我正在阅读 C++ Primer, 5th Edition 来学习 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 s = "word";
string p1 = s + ((s[s.size() - 1] == 's')? "" : "s");
我假设你想要这样的东西:
string p1 = s + ((s[s.size() - 1] == 's')? "" : "s");