作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我实际上想知道在 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';
但是,您有更好的想法来实现这一点吗?
当我们有更大的数字和更多的字母时怎么办(我认为 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
}
编辑:我正在使用@YSC 建议的 struct
和 std::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;
}
关于c++ - 如何将范围映射到值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42509750/
我是一名优秀的程序员,十分优秀!