利用位图方法求字符串的组合(类似于位运算模拟加法)
2012-08-02 10:13
288 查看
题目:输入一个字符串,输出该字符串中字符的所有组合。举个例子,如果输入abc,它的组合有a、b、c、ab、ac、bc、abc。
解析:我们可以通过位数组来实现打印所有组合,这类似于用字符串模拟加法操作一样。不过用字符串模拟加法操作是逢10进1,用位模拟是逢2进1。 以abc为例:
初始化位bitset<3> 模拟每次加1它的变化为为 000 ---001 ---010 -- 011 --- 100 ---101 --- 110 --111 。当某一位为 0 的时候,不输出,为 1的时候 输出对应于 abc中的那一位。
源码如下:
解析:我们可以通过位数组来实现打印所有组合,这类似于用字符串模拟加法操作一样。不过用字符串模拟加法操作是逢10进1,用位模拟是逢2进1。 以abc为例:
初始化位bitset<3> 模拟每次加1它的变化为为 000 ---001 ---010 -- 011 --- 100 ---101 --- 110 --111 。当某一位为 0 的时候,不输出,为 1的时候 输出对应于 abc中的那一位。
源码如下:
#include <iostream> #include <bitset> #include <string> using std::cout; using std::cin; using std::endl; using std::string; using std::bitset; // 由于c++中bitset不支持动态分配。 使用bitset<n>时 n的值不能使用局部变量 // 所以现在只能是用全局变量计算出字符的个数,再赋值给n。 当STR改变时,不要 // 忘了手动改变CHAR_COUNT 的值 const string STR = "abc"; const int CHAR_COUNT = 3; // 字符的个数 bool Increment(bitset<CHAR_COUNT>&bits) { if(CHAR_COUNT <= 0) return false; for(int i = CHAR_COUNT-1; i >=0; i--) { if(0 == bits[i]) { bits[i] = 1; break; } else { if(i != 0) { bits[i] = 0; // 相当于进位操作,低位置为0 } else { return false; // 最高位为1 ,再次进行加法将溢出 } } } return true; } void Print(const bitset<CHAR_COUNT>&bits, const string&str) { if(CHAR_COUNT <= 0 || CHAR_COUNT != str.length()) { return; } for(int i = 0; i != CHAR_COUNT; i++) { if(1 == bits[i]) cout << str[i]; } cout << endl; } void Combination() { bitset<CHAR_COUNT> bits; while(Increment(bits)) { Print(bits, STR); } } int main() { Combination(); system("pause"); }
相关文章推荐
- 位运算模拟二进制加法--位图方法
- 模拟java的split函数,分割字符串,类似于java的split方法
- 利用JS提高组合拼接字符串效率的方法(转)
- 字符串四则运算表达式的求解(中缀表达式实现,模拟笔算的方法)
- 利用JS提高组合拼接字符串效率的方法
- 利用JS提高组合拼接字符串效率的方法
- 模拟java的split函数,分割字符串,类似于java的split方法
- 利用JS提高组合拼接字符串效率的方法
- 利用JS提高组合拼接字符串效率的方法
- Java 程序优化:字符串操作、基本运算方法等优化策略
- 利用split()方法 得到子字符串出现的次数
- 利用Python字符串的zfill方法在数字前补0
- ENVI扩展工具:利用波段运算修改NaN方法总结
- Java字符串利用正则除去中文快捷方法
- 通过字符串创建对象并访问类中的方法(利用java的反射)
- 【Java】利用Math.Random()方法随机出四个字符的字符串,字符包括数字,大小写英文字母
- 利用PHP函数计算中英文字符串长度的方法
- as3 模拟去掉字符串前后自定字符Trim()方法实现
- 流编辑器sed使用总结及利用sed从文本中提取字符串的方法
- C#中利用LINQ to XML与反射把任意类型的泛型集合转换成XML格式字符串的方法