1

我正在閱讀C++ Primer,第5版來學習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」,如果最後一個字符是一個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");