我正在閱讀C++ Primer,第5版來學習C++,但是我遇到了一個我堅持的問題。問題如下:修復表達式;運算符優先級
由於運算符優先級,下列表達式無法計算。 你會如何解決它?
string s = "word"; string p1 = s + s[s.size() - 1] == 's' ? "" : "s";
我嘗試了各種解決方案,但我似乎無法得到它。我的邏輯是平等運算符需要兩個表達式,所以我需要創建,但我的解決方案不工作..任何幫助,非常感謝!
我正在閱讀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」,如果最後一個字符是不一個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");
是的,謝謝...我感覺像一個ID iot now ... – liamjnorman
如果您接受答案,會很好:) – Bernhard
你想要的東西,如:
string s = "word";
string p1 = s + ((s[s.size() - 1] == 's')? "" : "s");
你需要發佈你的非工作解決方案,所以我們可以幫你 – Bull
我試圖這個無濟於事... string p1 =((s + s [s.size()-1] == 's')?「」:「s」; – liamjnorman