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

CS50 readability测试函数计算文本年级结果与预期不符问题

Coleman-Liau阅读年级计算结果偏差排查

问题根因

你的单词统计逻辑存在漏洞,导致单词数比实际值少1,最终计算结果偏高。
现有代码通过统计空格(ASCII码32)的数量累加单词数,但是正常文本的最后一个单词后不会尾随空格,因此统计到的空格数永远比实际单词数少1。
针对你提供的测试文本:

There are more things in Heaven and Earth, Horatio, than are dreamt of in your philosophy.
各参数正确统计值与代码统计值对比如下:

  • 实际字母数:71,代码统计值:71(字母统计逻辑正确)
  • 实际句子数:1,代码统计值:1(句子统计逻辑正确)
  • 实际单词数:16,代码统计值:15(单词统计少1个)

数值偏差验证

代入正确参数计算:

  • L = 平均每100个单词的字母数 = (71 / 16) * 100 ≈ 443.75
  • S = 平均每100个单词的句子数 = (1 / 16) * 100 = 6.25
  • 指数计算:0.0588 * 443.75 - 0.296 * 6.25 - 15.8 ≈ 8.44,四舍五入后为9,和官方预期一致。
    代入你代码输出的错误单词数15计算:
  • L = (71 / 15) * 100 ≈ 473.33
  • S = (1 / 15) * 100 ≈ 6.67
  • 指数计算:0.0588 * 473.33 - 0.296 * 6.67 - 15.8 ≈ 10.06,四舍五入后为10,和你运行得到的错误结果完全匹配。

修复方法

将单词计数的初始值从0改为1即可:非空输入文本至少存在1个单词,每遇到1个空格代表新增1个单词,统计结果就会和实际值对齐。
修改对应代码行:

// 原错误初始化
// int words = 0;
// 修复后
int words = 1;

如果需要兼容空输入的极端场景,可以在统计前先判断输入文本长度是否为0,若为空直接返回对应结果即可,CS50本题的测试用例均为正常非空文本,修改初始值即可通过所有测试。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 20:57:21