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

如何编写C语言程序统计下划线间字符数?程序异常问题求助

解决C语言统计下划线间字符数的问题

你的代码在处理无下划线结尾的字符串时出错,核心问题有两个:

  • password_numbers函数遍历完字符串未遇到下划线时返回0,而非实际字符数
  • array_password_numbers的循环逻辑会重复处理无效位置,导致填充大量冗余0

修改后的代码

1. 修复password_numbers函数

int password_numbers(const char *s){
    int count = 0;
    // 直接判断字符结束符,避免循环内反复调用strlen提升效率
    for(int i = 0; s[i] != '\0'; i++)
    {
        if(s[i] != '_')
        {
            count++;
        }
        else
        {
            return count;
        }
    }
    // 遍历完未遇到下划线,返回累计的字符数(原逻辑返回0是错误根源)
    return count;
}

2. 修复array_password_numbers函数

int array_password_numbers(int *a, int n, char *s){
    int result = 0;
    int i = 0;
    // 提前计算字符串长度,避免循环内重复调用strlen
    int len = strlen(s);
    while( i < len ){
        int streak = password_numbers(s + i);
        a[result++] = streak;
        // 仅当当前段后是下划线时,才跳过下划线继续处理;否则直接结束循环
        if(i + streak < len && s[i + streak] == '_'){
            i += streak + 1;
        } else {
            break;
        }
    }
    return result;
}

修改说明

  1. password_numbers调整:

    • 循环条件改为直接判断字符串结束符,避免每次循环调用strlen(strlen会遍历整个字符串,效率低下)
    • 遍历完成未遇到下划线时,返回累计的字符数,而非0,解决了无下划线输入返回0的问题
  2. array_password_numbers调整:

    • 提前计算字符串长度,减少重复计算
    • 增加判断逻辑:仅当前段后续字符是下划线时,才移动指针到下划线后继续处理;否则直接退出循环,避免了无效位置的重复处理,消除了冗余0的输出

经过上述修改后,四个测试场景均可得到正确输出:

  • 输入"All_I_Need_" → 输出3 1 4
  • 输入"All_I_Need" → 输出3 1 4
  • 输入"All_" → 输出3
  • 输入"All" → 输出3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 07:31:07