将整数转换为字母字符

Converting integers to alphabetic characters

本文关键字:字符 整数 转换      更新时间:2023-10-16

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

  • 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;
}

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

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

演示。

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

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

代码长度是一个糟糕的标准=)出于多种原因,我建议您使用自定义映射函数(整数到字符或字符串)或带有switch / if的类。

如果我们遵循 OOP 方法,我们可以定义一个类Grade使用构造函数从整数Grade(int)与方法toString()toChar.最好从客户端代码中封装类中的等级转换逻辑 - 因为将来您可以添加不同的语言环境(例如我们在俄罗斯没有 A-C 等级系统,我们只有 1-5) - 并从配置加载语言环境,例如在XML中。此外,您可以在某个容器中静态预定义范围并运行for-each来分配char表示形式,但是在时间和内存方面效率低下。

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