0

我对 C++ 相当陌生,所以如果这是一个愚蠢的问题,请原谅我,但我已经搜索过,但我只发现了一些std::find似乎没有做我想做的事情(也许我没有正确使用它)。

例如,假设我有一个可以存储您的性别的基本程序。我有一个 if 语句,它只检查用户是否输入了“男性”或“男性”,然后执行我希望它执行的任何操作:

if(gender == "male" || gender == "Male"){
    // Do stuff
}

我想扩展它,以便用户也可以输入“m”或“M”,它会被检测为男性。但是,我认为 if 语句会有点混乱,所以我正在考虑将选项粘贴到一个简单的数组中并执行以下操作:

if(gender is in maleArray){
    // Do stuff
}

这可能吗?我不太担心涉及的任何不良做法,因为这是一个学习场景,尽管任何(有用的)批评或替代方案都会受到赞赏,例如示例!

在此先感谢,希望我说得足够清楚。

4

2 回答 2

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_synonymsstd::find如果找不到,则返回过去的迭代器,这就是我们检查的内容。

但是,我更喜欢这个:

std::transform(gender.begin(), gender.end(), gender.begin(), std::tolower);
if (gender == "m" || gender == "male") {
  // ...
}

这将接受不区分大小写mmale. 所以MalE, M,mALE等也是正确的。

于 2013-02-26T16:57:47.533 回答
2

如果您担心 if 语句的混乱,您可以使用一个返回布尔值的方法 isMale()。然后你可以像 if(isMale(gender)) 一样使用它。

bool isMale(std::string gender)
{
    if(gender == "male" || 
       gender == "Male" ||
       gender == "M"    ||
       gender == "m"      )
    {
        return true;
    }
    else
    {
        return false;
    }
}

如果您不关心大小写,您可以将性别字符串转换为所有小案例,然后与“男性”和“m”进行比较。

于 2013-02-26T16:57:30.487 回答