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

C++字符数组单词计数异常:计数器返回错误值求助

代码问题排查与修复

问题点分析

  • 循环范围错误:你在nameCount里固定循环30次(LENGTH值),但输入的有效字符串长度通常远小于这个数。数组未初始化的部分是随机垃圾值,这些值可能被误判为空格或'\0'导致计数器疯涨;如果垃圾值恰好都不匹配条件,就会出现计数器为0的异常。
  • 统计逻辑错误:你现在统计的是空格和'\0'的数量,这和单词数量完全不是一回事。比如输入“John Smith”,正确单词数是2,但你的逻辑会统计1个空格+1个'\0',再加上后面垃圾值的匹配项,结果完全不符合预期。

修复后的代码

#include <iostream>
    
using namespace std;
   
void nameCount(char[], int&);
    
const int LENGTH = 30;
int main()
{
    char name[LENGTH];
    int count = 0;
    cout << "Input full name: ";
    cin.getline(name, LENGTH);
    nameCount(name, count);
    cout << count;
    return 0;
}

void nameCount(char fullName[], int& count) {
    // 处理空输入的情况
    if (fullName[0] == '\0') {
        count = 0;
        return;
    }

    // 非空输入至少有一个单词
    count = 1;
    // 只遍历到字符串结束符,不处理垃圾值
    for (int i = 0; fullName[i] != '\0'; i++) {
        // 遇到非连续、非结尾的空格时,单词数+1
        if (fullName[i] == ' ' && fullName[i+1] != ' ' && fullName[i+1] != '\0') {
            count++;
        }
    }
}

修复说明

  1. 把循环终止条件改成fullName[i] != '\0',只处理输入的有效字符串部分,彻底避免垃圾值干扰。
  2. 调整统计逻辑:初始单词数设为1(非空输入至少有一个单词),只有遇到不是连续空格、且空格后还有有效字符时才增加计数,避免连续空格或结尾空格导致的错误统计。
  3. 增加空输入判断,确保输入为空时返回0。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 15:15:29