【问题标题】:Fix expression; operator precedence [closed]修复表达式;运算符优先级[关闭]
【发布时间】:2013-12-28 02:49:40
【问题描述】:

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

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

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

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

【问题讨论】:

  • 您需要发布无效的解决方案,以便我们为您提供帮助
  • 我试过这个没有用... string p1 = ((s +s[s.size() -1] == 's') ? "" : "s";

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


【解决方案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的最后一个字符确定

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 是的,谢谢...我现在感觉自己像个白痴...
    • 如果你接受答案会很好:)
    【解决方案3】:

    你想要这样的东西:

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

    【讨论】:

      猜你喜欢
      • 2011-07-24
      • 2021-10-04
      • 2020-06-23
      • 1970-01-01
      • 2017-10-25
      • 2016-08-20
      • 2013-08-04
      • 2016-05-06
      • 1970-01-01
      相关资源
      最近更新 更多