将整数转换为字母字符

时间:2016-06-25 13:23:16

标签: c++ ascii

我想根据考试成绩分配成绩。

  • A 90-100
  • B 80-89
  • C 70-79
  • D 60-69
  • F 0-59

我知道如果您使用switchif..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;
}

2 个答案:

答案 0 :(得分:18)

在输入选择数量有限的情况下,标准方法是使用查找表:

cout << "FFFFFFDCBAA"[Score/10];

Demo.

  

(来自评论)你能否解释一下代码中发生了什么?

字符串文字"FFFFFFDCBAA"被视为const char*指针,允许应用索引器[]运算符。 Score以整数除以10,产生0到10之间的数字,包括0和10。字符串中的11个字符对应于“原始”分数的字母等级除以10。

答案 1 :(得分:0)

代码长度是一个错误的标准=)我建议你使用自定义映射函数(整数到char或字符串)或类switch / if有很多原因。

如果我们将遵循OOP方法,我们可以使用方法GradeGrade(int)的整数toString()的构造函数定义类toChar。最好从客户端代码中填充类内部的等级转换逻辑 - 因为将来你可以添加不同的语言环境(例如我们在俄罗斯没有AC等级系统,我们只有1-5) - 并从中加载语言环境配置,例如在XML中。您还可以在某个容器中静态预定义范围并运行for-each以指定char表示,但它在时间和内存方面效率不高。

我认为这是为人类编写代码的更好解决方案(性能或其他标准很重要的情况除外 - 但据我所知,情况并非如此)