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

C++统计首字母为大写的单词数量实现问题求助

现有代码存在的问题
  • 语法错误:函数定义头int countLegalWords(char str[])后缺少函数体起始大括号{,代码逻辑没有被正确包裹在函数范围内。
  • 首字母判定逻辑错误:没有判断当前大写字符是否为单词的第一个字符,类似liKE里的非首字母大写K会被误判为合法单词。
  • 边界条件错误:用MAXSIZE作为遍历上限,没有识别字符串结束符\0,会读取字符串外的无效内存;同时要求大写字符后必须接小写字母,会漏掉测试用例中末尾单个大写字母H这类合法场景。
  • 空格处理逻辑无效:else if (str[i] == ' ')的判断写在了str[i]是大写的分支内,永远不可能触发,完全不生效。
修正后的实现代码
#include <cstring>
#define MAXSIZE 1024 // 可根据实际业务需求调整上限值

int countLegalWords(char str[]) {
    int counter = 0;
    int strLen = strlen(str); // 提前获取字符串实际长度,避免内存越界
    for (int i = 0; i < strLen; i++) {
        // 仅当字符是单词首字符(字符串开头/前一个字符是空格)且为大写时计数
        if ((i == 0 || str[i-1] == ' ') && str[i] >= 'A' && str[i] <= 'Z') {
            counter++;
        }
    }
    return counter;
}
逻辑说明
  • 仅判断单词的第一个字符是否为大写,不限制单词后续字符的大小写,完全匹配需求。
  • 基于字符串实际长度遍历,不会访问无效内存,也不会漏掉末尾单个大写字母的合法场景。
  • 测试用例输入I liKE Ice Cream H时,会正确识别I、Ice、Cream、H4个合法单词,输出结果符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 05:24:05