gpt4 book ai didi

c++ - 计算二进制模式的子集

转载 作者:太空狗 更新时间:2023-10-29 20:18:57 25 4
gpt4 key购买 nike

我有一个 A=一组字符串和一个 B=单独的字符串。我想计算 B 在 A 中出现的次数。

示例:

A:
10001
10011
11000
10010
10101

B:
10001

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

所以我需要一个接受集合和字符串并返回 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(), NULL, 2) & searchInteger) == searchInteger)
++result;
return result;
}

关于c++ - 计算二进制模式的子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2540742/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com