我对C ++很新,请原谅我,如果这是一个愚蠢的问题,但我已经搜索过了,我只发现了一些关于std::find
似乎没有做我想做的事情(也许是我'我没有正确使用它。)
例如,假设我有一个可存储您性别的基本程序。我有一个if语句,只是检查用户是否输入“男性”或“男性”,然后做我想做的任何事情:
if(gender == "male" || gender == "Male"){
// Do stuff
}
我想扩展它,以便用户也可以输入“m”或“M”,并且它将被检测为男性。但是,我认为if语句会有点乱,所以我正在考虑将选项粘贴到一个简单的数组中并执行:
if(gender is in maleArray){
// Do stuff
}
这可能吗?我并不太担心任何不良做法,因为这是一个学习场景,尽管任何(有用的)批评或替代方案都是受到赞赏的,例如!
先谢谢,希望我说清楚。
答案 0 :(得分:4)
您要求的解决方案是:
std::array<std::string, 4> male_synonyms = {"Male", "male", "M", "m"};
auto it = std::find(male_synonyms.begin(), male_synonyms.end(), gender);
if (it != male_synonyms.end()) {
// ...
}
使用std::find
查看用户输入gender
是否在字符串序列male_synonyms
内。 std::find
返回过去的迭代器(如果找不到),这就是我们检查的内容。
但是,我更喜欢这个:
std::transform(gender.begin(), gender.end(), gender.begin(), std::tolower);
if (gender == "m" || gender == "male") {
// ...
}
这将接受不区分大小写的m
和male
。因此MalE
,M
,mALE
等也是正确的。
答案 1 :(得分:2)
如果你担心的是if语句的混乱,你可以使用一个返回布尔值的方法isMale()。然后你可以像使用它一样(isMale(性别))。
bool isMale(std::string gender)
{
if(gender == "male" ||
gender == "Male" ||
gender == "M" ||
gender == "m" )
{
return true;
}
else
{
return false;
}
}
如果您不关心此案例,可以将性别字符串转换为所有小案例,然后与“男性”和“男性”进行比较。