【问题标题】:function gives wrong results函数给出错误的结果
【发布时间】:2011-03-17 19:33:44
【问题描述】:

我尝试编写以下函数,通过从我的算法文本中翻译算法来生成字符串的所有组合。但它会在所有组合的输出中保留打印整个字符串。

len = strlen(str);
for(i=0;i<pow(2,len);i++) 
{
        for(j=0;j<len;j++) 
        {
                if(i && (0x1 << j)) 
                {
                        cout<<str[j];
                }
        }
        cout<<endl;
}

谢谢大家。

【问题讨论】:

  • 因为这是 C++,所以更喜欢使用 std::stringchar *。获取std::string 的长度比在char * 中扫描'\0' 更快。此外,std::string 更安全,可以增长。
  • @Thomas Matthews:您确实意识到(len * len) 不能替代pow(2, len),对吧?
  • @Blastfurnace:对不起,我的错。参数搞混了。删除了关于 pow(2, len) == (len * len) 的评论。

标签: c++ algorithm operators combinations


【解决方案1】:

由于您要检查变量i 中是否设置了jth 位,因此您需要使用按位&amp; 运算符而不是逻辑&amp;&amp;

if(i && (0x1 << j))
     ^^

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-16
  • 1970-01-01
相关资源
最近更新 更多