怎么说如果有什么东西在其他东西c ++

时间:2017-06-22 02:23:12

标签: c++

我想知道是否有一种简单的方法可以在c ++中编写这个if语句。

string c="B";
if(c=="B"||c=="X"||c=="I")
{
//stuff
}

例如,

string c="B";    
if(c in {"b","X","I"})
{
//stuff
}

3 个答案:

答案 0 :(得分:1)

此语言没有直接支持,但您可以使用函数来模拟它。例如,让我们定义一个接受字符串的函数和要比较的字符串向量:

bool in(const std::string& s, std::vector<std::string> v)
{
    for (auto&& i : v)
        if ( s == i)
            return true;
    return false;
}

现在您可以使用initilizer列表直接在if语句中使用此函数:

int main()
{
    std::string c = "B";
    if ( in(c, {"C","X","I", "B"}) )
        std::cout << "found\n";
    else
        std::cout << "not found\n"; 
}

答案 1 :(得分:1)

您可以使用std :: find函数搜索您的数组。假设您的数组是arr = [&#34; C&#34;,&#34; X&#34;,&#34; I&#34; ]: tofind string c =&#34; C&#34; 例如,您的陈述将更改为: -

  if(find(arr.begin(),arr.end(),c)!=arr.end())
   {
   //found do something

    }

没有&#34; in&#34;在C ++中

答案 2 :(得分:0)

如果进行多次搜索,std::setstd::unordered_map(C ++ 11哈希表)的性能优于线性搜索std::find的数组。

std::set<std::string> data_set{"B","X","I"};
//...somewhere else
bool has_c = data_set.count(c)>0;

std::setstd::unordered_map都有一个count函数,可以测试一个非常干净的值,即避免使用迭代器。

程序

这是一个完整的工作计划,

#include <string>
#include <set>
#include <iostream>
using namespace std;
int main()
{
    set<string> data_set{"C","X","I"}

    //...somewhere else
    string c="B";
    if( data_set.count(c)>0 )
    {
        cout << "here\n";
    }
    else
    {
        cout << "not\n";
    }
}

编译时不要忘记设置C ++ 11标准,例如g++ -std=c++11 main.cc