首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多个if-否则测试的更容易的方法

多个if-否则测试的更容易的方法
EN

Stack Overflow用户
提问于 2019-10-08 13:15:48
回答 4查看 131关注 0票数 0

我有一个字符串,如果字符串值与给定的一组单词匹配,我想执行if语句(比如猿、吃、睡、芒果.)

我能做到:-

代码语言:javascript
复制
if(name=="ape" || name=="eat".............)

有什么更简单的方法吗?

我只想用其他的。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-10-08 13:17:42

Decalare是一个单词数组,然后使用标准算法std::findstd::any_of

例如

代码语言:javascript
复制
const char * words[] =
{
    "ape", "eat", "sleep", "mango"
}; 

if ( std::find( std::begin( words ), std::end( words ), name ) != std::end( words ) )
{
   //...
}

如果要声明排序数组,则可以使用标准算法std::binary_search

这里有一个演示程序

代码语言:javascript
复制
#include <iostream>
#include <string>
#include <iterator>
#include <algorithm>

int main() 
{
    const char * words[] =
    {
        "eat", "ape", "mango", "sleep" 
    };

    std::string name( "mango" );

    if ( std::binary_search( std::begin( words ), std::end( words ), name ) )
    {
        std::cout << name << " is a correct name\n";
    }

    return 0;
}

其输出是

代码语言:javascript
复制
mango is a correct name

或者将单词放在标准容器中,例如std::set,并使用容器的查找方法。

票数 2
EN

Stack Overflow用户

发布于 2019-10-08 13:18:41

如果您希望只使用ifelse,而不添加任何内容,则不存在这种情况。

否则,您可以使用std::unordered_set,用这些单词填充它,并使用find()

票数 2
EN

Stack Overflow用户

发布于 2019-10-08 13:20:21

代码语言:javascript
复制
for(auto pattern: {"ape", "eat"}) {
   if(name == pattern) {
      // all the consequences here
      break;
   }
}

或者,在热路径上,您可以使用类似哈希集的内容:

代码语言:javascript
复制
static const std::unordered_set<std::string> words{"ape", "eat"};
if(words.find(name) != words.end()) {
}

只需确保它是一个static const,不要每次重新初始化它。如果您有大量的模式可供使用,可能会更好。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58287145

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档