回答
假设这是对经典的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
我支持'+',' - ','*'和'/'。 –