如果字符串在数组中,请执行此操作? 我对C++是相当新的,所以请原谅我这是一个愚蠢的问题,但是我已经搜索过了,我只发现了关于 STD::查找< /COD>这似乎不做我想要的(也许我没有正确使用它)。
例如,假设我有一个基本程序,可以存储你的性别。我有一个if语句,它只检查用户是否输入了“male”或“male”,然后执行我希望它执行的任何操作:如果字符串在数组中,请执行此操作? 我对C++是相当新的,所以请原谅我这是一个愚蠢的问题,但是我已经搜索过了,我只发现了关于 STD::查找< /COD>这似乎不做我想要的(也许我没有正确使用它)。,c++,arrays,string,if-statement,C++,Arrays,String,If Statement,例如,假设我有一个基本程序,可以存储你的性别。我有一个if语句,它只检查用户是否输入了“male”或“male”,然后执行我希望它执行的任何操作: if(gender == "male" || gender == "Male"){ // Do stuff } 我想扩展它,这样用户也可以输入“m”或“m”,它将被检测为男性。但是,我认为if语句有点混乱,因此我考虑将选项粘贴到一个简单数组中,并执行以下操作: if(gender is in maleArray){ // Do st
if(gender == "male" || gender == "Male"){
// Do stuff
}
我想扩展它,这样用户也可以输入“m”或“m”,它将被检测为男性。但是,我认为if语句有点混乱,因此我考虑将选项粘贴到一个简单数组中,并执行以下操作:
if(gender is in maleArray){
// Do stuff
}
这可能吗?我不太在意任何不良实践,因为这是一个学习场景,尽管任何(有用的)批评或选择都是值得赞赏的,例如
提前谢谢,希望我说得够清楚。如果您关心的是If语句的混乱,您可以使用一个返回布尔值的方法isMale()。然后你可以像(isMale(gender))一样使用它
如果您不关心大小写,可以将性别字符串转换为所有小写,然后与“male”和“m”进行比较。如果您关心的是If语句的混乱,可以使用返回布尔值的方法isMale()。然后你可以像(isMale(gender))一样使用它
如果您不关心大小写,您可以将性别字符串转换为所有小大小写,然后与“男性”和“m”进行比较。您要求的解决方案是:
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()) {
// ...
}
这将接受不区分大小写的
m
和male
。因此,MalE
、M
、MalE
等也都是正确的。您要求的解决方案是:
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()) {
// ...
}
这将接受不区分大小写的
m
和male
。所以MalE
,M
,MalE
,等等都是正确的。std::find
会做你想做的事。你能举个例子作为答案吗?我似乎不能理解它是一个IF条件。所以<代码> STD::String::查找< <代码>性别>代码>小写,也可以考虑比较,这样你就不会有多余的情况了,比如<代码>男性< /代码>,<代码>男性< /代码>,<代码>男性< /代码>等。(除上述内容外)<代码> > STD::查找< /COD>会做你想做的事。你能把一个例子作为答案吗?我不能把它当作一个IF条件来理解。所以<代码> STD::String::查找< /COD>。你应该考虑强迫<代码>性别>代码>小写,也可以考虑比较,这样你就不会有多余的情况了,比如<代码>男性< /代码>,<代码>男性< /c。ode>,男性
,等等@crush我该怎么做(除了上述内容)?我如何强制它小写?有多种方法强制它小写,但这可能是最好的一种:我如何强制它小写?有多种方法强制它小写,但这可能是最好的一种:向量很好,因为它们动态扩展/收缩。但你必须小心,因为它们可以做很多事情根据我的理解,重新分配内存。您可能需要static\u cast(std::lower)
来编译第二个代码段(如果还可以看到来自的tolower
重载)向量很好,因为它们是动态扩展/收缩的。但你必须小心,因为据我所知,它们可以对内存进行大量的重新分配。你可能需要static\u cast(std::lower)
来编译第二个代码段(如果还可以看到来自的tolower
重载)
std::transform(gender.begin(), gender.end(), gender.begin(), std::tolower);
if (gender == "m" || gender == "male") {
// ...
}