加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 二进制模式的计数子集

发布时间:2020-12-16 09:26:56 所属栏目:百科 来源:网络整理
导读:我有一个A =字符串集和一个B =单独的字符串.我想计算A中B的出现次数. 示例: A:1000110011110001001010101B:10001result would be 3.(10001 is a subset of 10001,10011,10101) 所以我需要一个带有set和string的函数并返回一个int. int myfunc(setstring,str
我有一个A =字符串集和一个B =单独的字符串.我想计算A中B的出现次数.

示例:

A:
10001
10011
11000
10010
10101

B:
10001

result would be 3.(10001 is a subset of 10001,10011,10101)

所以我需要一个带有set和string的函数并返回一个int.

int myfunc(set<string>,string){
int result;
// My Brain is melting
return result ;
}

编辑:
?00000不应该是任何东西的子集!

解决方法

如果您可以控制输入,并且这些字符串实际上应该表示位掩码,那么您可能希望将它们保留为某种类型的整数并使用其他人建议的位掩码.否则,如果您坚持将它们作为字符串处理,并且您将使用相同的字符串集进行多次搜索,那么您最好将它们转换为完整的位掩码.

但是,如果只对一组字符串进行处理,那么最好只浏览一下并手动检查每一次.副手,像这样:

int myfunc(set<string> in,string search){
    assert(search.length() <= 32);
    int result = 0;
    for(set<string>::iterator iIn = in.begin(); iIn != in.end(); ++iIn)
    {
       bool isSubset = true;
       if (iIn->length() != search.length()) // Is this guaranteed?
           isSubset = false;
       for (int iSearch = 0; isSubset && iSearch < search.length; ++iSearch)
           if (search[iSearch] == '1' && (*iIn)[iSearch] == '0')
               isSubset = false;
       if (isSubset)
           ++result;
    }
    return result;
}

或者转换为长第一版:

int myfunc(set<string> in,string search){
    int result = 0;
    long searchInteger = strtol(search.c_str(),NULL,2);
    for(set<string>::iterator iIn = in.begin(); iIn != in.end(); ++iIn)
        if ((strtol(iIn->c_str(),2) & searchInteger) == searchInteger)
            ++result;
    return result;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读