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

Codewars Detect Pangram问题排查:C#代码不符合预期求分析

问题排查与修复

代码存在的核心问题

  1. 非字母字符过滤不完整:你只过滤了ASCII码32到41的字符(空格、!、"、#、$、%、&、'、(、)),但数字、逗号、句号等其他非字母字符都没被过滤,这些字符会被加入集合,导致集合元素数量不等于26,即使字符串是全字母句也会返回false。
  2. 判断逻辑不准确:直接通过set.Count == 26判断,但如果集合中混入非字母字符,即使包含全部26个字母,Count也会大于26,导致错误返回false。
  3. 大小写处理逻辑和思路不一致:你的思路是转小写存入集合,但代码里把小写字母转成大写存入,虽然不影响字母唯一性,但逻辑不够统一,容易混淆。

修复后的代码

private static bool IsPangram(string str)
{
    var letterSet = new HashSet<char>();
    
    foreach (char ch in str)
    {
        // 只处理字母字符,忽略所有非字母内容
        if (char.IsLetter(ch))
        {
            // 统一转小写存入集合,消除大小写差异
            letterSet.Add(char.ToLower(ch));
        }
    }
    
    // 集合中仅包含字母,数量为26则说明覆盖全部英文字母
    return letterSet.Count == 26;
}

修复说明

  • 用char.IsLetter(ch)直接判断字母,一次性过滤所有非字母字符(数字、标点、符号等),比手动判断ASCII码更可靠易读。
  • 统一转小写存入集合,完全匹配你最初的思路,避免大小写导致的重复存储问题。
  • 最终判断集合元素数量时,集合内只会有字母,只要数量达标就说明覆盖了全部26个英文字母。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 03:47:19