使用位操作检测字符串重复字符的C程序无输出问题求助
使用位操作检测字符串重复字符的C程序无输出问题求助
我来帮你排查这个问题——你的代码逻辑思路是对的,但运算符优先级踩坑了,这就是导致程序没输出的关键原因!
先看你代码里的这个判断条件:
if(x&H > 0)
C语言中,关系运算符>的优先级要高于按位与&,所以这句代码实际会被解释成:
if(x & (H > 0))
这完全不是你想要的逻辑!你原本想判断x和H的按位与结果是否大于0,但现在变成了先判断H是否大于0,再把结果(0或1)和x做按位与,这就导致你的条件几乎永远不成立,自然不会进入分支输出内容。
修复方案
把判断条件加上括号,明确运算顺序:
if( (x & H) > 0 )
另外还有个小细节:你定义的字符串是"finiding\0",其实字符串末尾的\0是多余的,C语言会自动给字符串常量添加终止符,不过这个不影响程序运行。
修正后的完整代码
#include<stdio.h> int main(){ char A[] = "finding"; 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; }
运行这段代码,就能正确输出重复的字符i和n了。
额外提醒
这个位操作的方法只适用于小写英文字母(因为你用了temp-97,对应a-z的ASCII码),如果要处理大写字母或其他字符,需要调整偏移量或者扩展掩码的位数哦。
备注:内容来源于stack exchange,提问作者Ashwin Gorle
相关产品推荐
相关产品推荐

