我想根据考试成绩分配成绩。
我知道如果您使用switch
或if..else
语句,将会有不超过5条语句,但任何人都有更好的解决方案吗?
我使用ASCII值来解决它,但就代码行而言,它只是相同的。
以下是代码:
Score/=10;
Score=min(9,Score);
Score=9-Score;
Score+=65;
if(Score<=68)
{
cout<<static_cast<char>(Score)<<endl;
}
else
{
cout<<"F"<<endl;
}
答案 0 :(得分:18)
在输入选择数量有限的情况下,标准方法是使用查找表:
cout << "FFFFFFDCBAA"[Score/10];
(来自评论)你能否解释一下代码中发生了什么?
字符串文字"FFFFFFDCBAA"
被视为const char*
指针,允许应用索引器[]
运算符。 Score
以整数除以10,产生0到10之间的数字,包括0和10。字符串中的11个字符对应于“原始”分数的字母等级除以10。
答案 1 :(得分:0)
代码长度是一个错误的标准=)我建议你使用自定义映射函数(整数到char或字符串)或类switch / if
有很多原因。
如果我们将遵循OOP方法,我们可以使用方法Grade
或Grade(int)
的整数toString()
的构造函数定义类toChar
。最好从客户端代码中填充类内部的等级转换逻辑 - 因为将来你可以添加不同的语言环境(例如我们在俄罗斯没有AC等级系统,我们只有1-5) - 并从中加载语言环境配置,例如在XML
中。您还可以在某个容器中静态预定义范围并运行for-each以指定char表示,但它在时间和内存方面效率不高。
我认为这是为人类编写代码的更好解决方案(性能或其他标准很重要的情况除外 - 但据我所知,情况并非如此)