gpt4 book ai didi

c++ - 如何将范围映射到值?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:06:21 24 4
gpt4 key购买 nike

我实际上想知道在 C++ 中将字母正确分配给一个范围的最佳方法是什么。

例如,我们有那个秤:

enter image description here

我们可以用最简单的方式进行赋值:

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 建议的 structstd::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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com