回答
假設這是對經典的RPN編程鍛鍊,最簡單的解決方法是使用一個switch
聲明:
char op = ...
int lhs = ...
int rhs = ...
int res = 0;
switch(op) {
case '+':
res = lhs + rhs;
break;
case '-':
res = lhs - rhs;
break;
case '*':
res = lhs * rhs;
break;
case '/':
res = lhs/rhs;
break;
case '%':
res = lhs % rhs;
break;
}
非常感謝您的幫助。我想確保在該語言中沒有可用的算術轉換。 –
@DerekW:不,C++不包括(在標準中)任何類型的表達式評估器。 C++中的運算符由編譯器解析,並且在運行時沒有它們的概念。 –
謝謝澄清。 –
由於@克里斯評論說,你可以製作一張人物函子:
std::map<char, std::function<double(double,double)> operators{
{ '+', std::plus<double>{} },
{ '-', std::minus<double>{} },
{ '*', std::multiplies<double>{} },
{ '/', std::divides<double>{} }
};
double apply(double lhs, double rhs, char op)
{
return operators[op](lhs, rhs);
}
如果您使用不代表已知運算符的字符調用該函數,則會拋出std::bad_function_call
。
它也將在地圖上對這種未知字符創建不必要的項目,以避免你可以把它稍微complciated:
double apply(double lhs, double rhs, char op)
{
auto iter = operators.find(op);
if (iter == operators.end())
throw std::bad_function_call();
return (*iter)(lhs, rhs);
}
(NB它使用C++ 11層的功能,但可以很容易地被翻譯爲C++ 03,使用boost::function
或std::tr1::function
)
- 1. 將等式轉換爲C++
- 2. 如何在C++中將0x70,0x61,0x73 ...等轉換爲Pas ...等等?
- 3. 數字格式:如何將1轉換爲「01」,2轉換爲「02」等?
- 4. 如何將2k,1m,1g等轉換爲2000,1000000等
- 5. 轉換爲多等
- 6. 如何將錢轉換爲
- 7. 將.e轉換爲e等.net c#
- 8. 將等式轉換爲位移操作
- 9. 將C#sha256 hashing轉換爲PHP等效
- 10. JRuby等效於將null轉換爲類
- 11. 將Marshal.Copy位圖轉換爲Silverlight等效
- 12. 將J2ME URLCaller類轉換爲Android等效
- 13. 將GUID轉換爲等價數字
- 14. 將數字轉換爲等級 - Java
- 15. 將curl轉換爲ruby等效
- 16. 將7FFFFFFF轉換爲十進制等值?
- 17. 將SQL轉換爲等效LINQ
- 18. 如何防止將decimal.TryParse轉換爲「。」爲「。」?
- 19. 如何將MSSQL轉儲轉換爲MySql
- 20. 如何將變體轉換爲(或轉換爲)AnsiChar?
- 21. 如何將換行符轉換爲\ n
- 22. 如何將Rust`Args`轉換爲argc和argv C等價物?
- 23. 如何將php curl_setopt轉換爲ruby等價物?
- 24. 如何將survfit結果轉換爲等於strata data.table?
- 25. 如何使用ffmpeg將vob轉換爲wmv以中等質量?
- 26. 如何將此Parallel.ForEach代碼轉換爲異步/等待
- 27. 如何將屏幕位置轉換爲等距位置
- 28. 如何將自定義CheckBoxList轉換爲等效的GridView?
- 29. 如何將python dict對象轉換爲java等效對象?
- 30. 如何將用戶輸入轉換爲等效的變量?
根據您支持的操作符的數量,您可能希望將每個字符映射到函數,如'std :: plus'。 – chris
我支持'+',' - ','*'和'/'。 –