C++ 显示字符串的集合和子集

C++ 显示字符串的集合和子集,c++,c++11,binary,set,subset,C++,C++11,Binary,Set,Subset,我试图找到子集并用二进制表示输出它们 例如: 000:EMPTY 001:C 010:B 011:B C 100:A 101:A C 110:A B 111:A B C 我有下面的代码,可以找到所有子集,但不确定二进制文件是什么 #include <iostream> using namespace std; void recsub(string sofar, string rest){ if(rest=="") cout<<sofar<<endl;

我试图找到子集并用二进制表示输出它们

例如:

000:EMPTY
001:C
010:B
011:B C
100:A
101:A C
110:A B
111:A B C
我有下面的代码,可以找到所有子集,但不确定二进制文件是什么

#include <iostream>
using namespace std;

void recsub(string sofar, string rest){
  if(rest=="") cout<<sofar<<endl;
  else{
    recsub(sofar+rest[0], rest.substr(1)); //including first letter
    recsub(sofar, rest.substr(1)); //recursion without including first letter.
  }
}

void listsub(string str){
  recsub("",str);
}

int main(){
  listsub("abc");
  return 0;
}
#包括
使用名称空间std;
void recsub(弦索、弦索){

如果(rest==“”)不能您可以用另一种方法执行,则首先生成
掩码,然后生成匹配字符串

#include <iostream>

using namespace std;

void listsub(const string &str) {
    auto n = str.size();
    // iterate over every binary representation
    for (size_t k = 0; k < (1u << n); ++k) {
        string binary;
        string subset;
        // iterate over every bit from right to left
        for (size_t bit = n ; bit > 0; --bit) {
            bool has_bit = (k & (1 << (bit - 1)));
            binary.push_back(has_bit ? '1' : '0');
            if (has_bit) {
                subset.push_back(str[n - bit]);
            }         
        }
        cout << binary << ':' << subset << endl;
    }
}
int main() {
    listsub("abc");
    return 0;
}
#包括
使用名称空间std;
void listsub(常量字符串和str){
自动n=str.size();
//迭代每个二进制表示
用于(大小k=0;k<(1u 0;--位){

布尔有_位=(k&(1)什么的子集?请清楚地说明您的问题!只需使用另一个字符串参数,例如
binary\u sofar
。对于包含第一个字母的情况,请将
'1'
附加到
binary\u sofar
;如果不包含该字母,请将
'0'
附加到
他筋疲力尽了。