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

Wordle模拟程序check_word函数异常求助:无报错但输出错误

问题诊断

你的check_word函数逻辑存在几个核心问题,导致字母误判:

  1. 状态被反复覆盖:内层循环遍历目标词时,同一个status[i]会被多次修改。比如猜词字母不在目标词中时,内层循环的每一次迭代都会触发WRONG分支,导致分数重复累加,逻辑完全混乱。
  2. 未处理重复字母匹配:Wordle规则中,目标词的每个字母只能被匹配一次(不管是EXACT还是CLOSE),你的代码没有这个限制,会导致重复匹配错误。
  3. 初始状态未初始化:status数组的初始值是随机的,会干扰status[i] != EXACT这类判断的结果。
修复后的代码
#include <string>
// 假设EXACT、CLOSE、WRONG是预先定义的常量,例如EXACT=2,CLOSE=1,WRONG=0
int check_word(std::string guess, int wordsize, int status[], std::string choice)
{
    int score = 0;
    // 初始化所有状态为WRONG,避免随机值干扰
    for (int i = 0; i < wordsize; ++i) {
        status[i] = WRONG;
    }

    // 第一步:处理完全匹配(EXACT),标记目标词已使用的位置
    bool used[wordsize] = {false};
    for (int i = 0; i < wordsize; ++i) {
        if (guess[i] == choice[i]) {
            status[i] = EXACT;
            score += EXACT;
            used[i] = true;
        }
    }

    // 第二步:处理位置错误但存在(CLOSE)的情况
    for (int i = 0; i < wordsize; ++i) {
        if (status[i] == EXACT) continue; // 跳过已匹配正确位置的字符

        for (int j = 0; j < wordsize; ++j) {
            if (!used[j] && guess[i] == choice[j]) {
                status[i] = CLOSE;
                score += CLOSE;
                used[j] = true; // 标记该目标词字符已被使用,防止重复匹配
                break;
            }
        }
    }

    return score;
}
修复说明
  • 初始化状态:先把所有status设为WRONG,保证初始状态统一,避免未初始化的垃圾值影响判断。
  • 分阶段处理:先搞定完全匹配的情况,再处理位置错误的匹配,逻辑更清晰,避免冲突。
  • 重复匹配防护:用used数组跟踪目标词中已经被匹配的字符,符合Wordle的规则——每个字母只能对应一次匹配结果。
  • 分数修正:每个字符只会被计算一次分数,不会因为内层循环多次迭代重复累加。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 08:02:41