Я читаю C ++ Primer, 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’, если последний символ не с. Итак, в длинной форме:
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");