c++ 使用按位运算符查找字符串中的重复项时出错[duplicate]

5jdjgkvh  于 2023-03-25  发布在  其他
关注(0)|答案(1)|浏览(89)

此问题在此处已有答案

Problem in finding duplicates in a string using bit manipulation(2个答案)
4天前关闭。
我想,我已经在C++中实现了正确的逻辑来使用位操作查找字符串中的重复项。但我无法理解为什么它在终端中不打印任何东西。有人能解释为什么这个问题在这里发生吗?

#include<stdio.h>

int main(){
char A[] = "finiding\0";
long int H=0;
long int x=0;
for(int i=0; A[i]!='\0'; i++){
    x=1;
    int temp = A[i];
    x = x<<(temp-97);
    if(x&H > 0){
        printf(" %c duplicate found !",A[i]);
    }else{
        H = x|H;
    }
}
return 0;
}

我已经检查了for循环执行了8次,这是根据字符串“finding”所期望的,但是控制没有进入if else块,该块被写入for循环。
我使用“H”作为散列变量,我设置了与每次进入循环的字符的ASCII代码相对应的位,然后使用if else检查该位是否通过掩码的概念设置,但仍然不起作用,我无法理解为什么会这样。

svmlkihl

svmlkihl1#

条件x&H > 0被解释为x & (H > 0),因为>运算符的优先级高于&运算符。
C++ Operator Precedence - cppreference.com
添加括号以将AND运算的结果与零进行比较,如(x&H) > 0

相关问题