此问题在此处已有答案:
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检查该位是否通过掩码的概念设置,但仍然不起作用,我无法理解为什么会这样。
1条答案
按热度按时间svmlkihl1#
条件
x&H > 0
被解释为x & (H > 0)
,因为>
运算符的优先级高于&
运算符。C++ Operator Precedence - cppreference.com
添加括号以将AND运算的结果与零进行比较,如
(x&H) > 0
。