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'
附加到他筋疲力尽了。