修复表达式;运算符优先级
Fix expression; operator precedence
我正在阅读C++初级读本,第5版学习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 p1 = s + ((s[s.size() - 1] == 's')? "" : "s");
您想要类似以下内容:
string s = "word";
string p1 = s + ((s[s.size() - 1] == 's')? "" : "s");
相关文章:
- C++ 带有函数指针的运算符优先级
- <<运算符优先级与字符串比较
- 在一个指令中声明更多指针的运算符优先级
- C++中的运算符优先级
- c++中的增量和三元运算符优先级
- 涉及模运算符优先级的错误以及C++中具有大数字的括号
- 带有 cout 和指针的运算符优先级
- C++ 使用矢量迭代器时的运算符优先级
- 序列点和运算符优先级有什么区别
- 运算符优先级 括号问题
- C++表达式中的运算符优先级
- 相等运算符优先级不起作用
- 递增和按位移位运算符优先级?
- 运算符优先级超载在C 中
- C++ 中的递增/递减和输出流运算符优先级
- 输出流中的运算符优先级C++
- 运算符优先级C++
- C++11 何时相对于运算符优先级进行算术类型转换
- 从表中了解运算符优先级
- 是否违反 C/C++ 运算符优先级和关联性规则?