1

Я читаю C++ Primer, 5th Edition, чтобы узнать C++, однако я столкнулся с вопросом, на который я как бы застрял. Вопрос заключается в следующем:Исправить выражение; приоритет оператора

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

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

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

+0

Вам необходимо отправить ваше нерабочее решение, чтобы мы могли помочь вам – Bull

+0

Я пытался это безрезультатно ... string p1 = ((s + s [s.size() -1] == 's')? "": "s"; – liamjnorman

ответ

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

0

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

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

Да, спасибо ... Я чувствую себя как id iot now ... – liamjnorman

+0

Было бы неплохо, если бы вы согласились ответить :) – Bernhard

0

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^