Исправить выражение; приоритет оператора

Я читаю C ++ Primer, 5-е издание для изучения C ++, однако я натолкнулся на вопрос, в котором я застрял. Вопрос в следующем:

Следующее выражение не может быть вычислено из-за приоритета оператора.
Как бы вы это исправить?

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

Я пробовал различные решения, но я не могу получить его. Моя логика заключается в том, что оператору равенства нужно два выражения, поэтому мне нужно его создать, но мои решения не работают .. Любая помощь очень ценится!

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’, если последний символ не с. Итак, в длинной форме:

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

1

Другие решения

Я предполагаю, что вы хотите что-то вроде этого:

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

Вы хотите что-то вроде:

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