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

使用位操作检测字符串重复字符的程序无输出问题排查

问题排查与修复

你的代码核心问题是运算符优先级错误,直接导致分支逻辑完全偏离预期:

在判断条件if (x & H > 0)中,C语言里关系运算符>的优先级高于按位与&,实际执行的是x & (H > 0),这和你想要的“判断x与H的按位与结果是否非零”逻辑完全不符。

另外还有一个次要问题:你定义的字符串"finiding\0"多写了一个i,正确的"finding"应该是6个字符加终止符,不过这不是无输出的核心原因。

修复后的代码如下:

#include <stdio.h>

int main() {
    char A[] = "finding"; // 修正拼写错误,字符串常量自动带终止符,无需手动加\0
    long int H = 0;
    long int x = 0;
    for (int i = 0; A[i] != '\0'; i++) {
        x = 1;
        int temp = A[i];
        // 增加小写字母判断,避免非字母字符导致移位越界
        if (temp < 'a' || temp > 'z') {
            continue;
        }
        x = x << (temp - 97);
        if ((x & H) > 0) { // 给按位与结果加括号,修正优先级问题
            printf(" %c duplicate found !", A[i]);
        } else {
            H = x | H;
        }
    }
    return 0;
}

修复点说明:

  • 修正字符串拼写错误,移除手动添加的\0(字符串常量会自动追加终止符)
  • 给x & H添加括号,确保先执行按位与操作,再判断结果是否大于0
  • 增加小写字母范围判断,避免非小写字母导致的移位越界(比如大写字母或符号会让temp-97成为负数或过大数值,移位行为未定义)

运行修复后的代码,输入"finding"会输出i duplicate found !和 n duplicate found !,符合预期。

内容的提问来源于stack exchange,提问作者Ashwin Gorle

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 21:52:18