You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用位操作检测字符串重复字符的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 10:39:32