如果string在数组中这样做吗?

时间:2013-02-26 16:46:45

标签: c++ arrays string if-statement

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

例如,假设我有一个可存储您性别的基本程序。我有一个if语句,只是检查用户是否输入“男性”或“男性”,然后做我想做的任何事情:

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

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

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

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

先谢谢,希望我说清楚。

2 个答案:

答案 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") {
  // ...
}

这将接受不区分大小写的mmale。因此MalEMmALE等也是正确的。

答案 1 :(得分:2)

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

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

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