1

我正在阅读 C++ Primer, 5th Edition 来学习 C++,但是我遇到了一个我有点卡住的问题。问题如下:

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

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

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

4

3 回答 3

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 ,我们想附加一个 '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

于 2013-12-10T14:37:54.557 回答
0

你想要这样的东西:

string s = "word";
string p1 = s + ((s[s.size() - 1] == 's')? "" : "s");
于 2013-12-10T14:32:17.660 回答
0

我假设你想要这样的东西:

string p1 = s + ((s[s.size() - 1] == 's')? "" : "s");
于 2013-12-10T14:30:02.757 回答