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
相关产品推荐
相关产品推荐

