我实际上想知道在 C++ 中将字母正确分配给范围的最佳方法是什么。
例如,我们有这样的规模:
我们可以用最简单的方式进行赋值:
if(a < 40)
return 'T';
else if(a < 55)
return 'D';
else if(a < 70)
return 'P';
else if(a < 80)
return 'A';
else if(a < 90)
return 'E';
else if(a <= 100)
return 'O';
Run Code Online (Sandbox Code Playgroud)
但是,您有更好的想法吗?
当我们有更大的数字和更多的字母时该怎么办(我认为 if 语句仍然很烦人......)?或者,如果范围之间有空闲空间(例如 30-40 45-55 60-70)怎么办?
您可以使用简单数组来排序范围和输出
char getGrade (int grade) {
int upper[] = { 40, 55, 70, 80, 90, 100 };
int lower[] = { 0, 40, 55, 70, 80, 90 };
char grades[] = { 'T', 'D', 'P', 'A', 'E', 'O' };
for (int i = 0; i< 6; i++)
if ((grade< upper[i]) && (grade >= lower[i]))
return grades[i];
return 'X'; // no grade assigned
}
Run Code Online (Sandbox Code Playgroud)
编辑:我正在添加@YSC 的有趣实现并由struct@YSCstd::find_if建议
#include <iostream>
#include <algorithm>
#include <vector>
struct Data{ int lower; int upper; char grade; };
char getGrade (int grade, std::vector<Data> data) {
auto it = std::find_if(
data.begin(),
data.end(),
[&grade](Data d) { return (d.lower<= grade) && (d.upper > grade); }
);
if (it == data.end())
return 'X'; // not found
else
return it->grade;
}
int main () {
const std::vector<Data> myData = { { 0, 40, 'T'} , { 40, 55, 'D'}, {55, 70, 'P'}, {70, 80, 'A'}, {80, 90, 'E'}, {90, 101, 'O'} };
std::cout << getGrade(20, myData) << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3616 次 |
| 最近记录: |