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

C语言统计字符串每个单词长度,代码运行无输出如何解决?

问题原因
  • 循环变量i的增量逻辑错误:单轮循环内最多会对i执行3次自增操作,导致字符串遍历跳步,无法正常读取每个字符,甚至可能出现数组越界。
  • 单词长度存储逻辑错误:当前逻辑是每处理一个字符就将wordlen清零并存入数组,且pos赋值逻辑错误,没有按照单词计数的顺序存入word数组的对应下标,最终word数组前几位始终为初始值0,打印循环直接触发break条件,所以没有任何输出。
  • 代码存在其他潜在问题:未定义常量N、未引入必要头文件、使用已被C标准废弃的不安全函数gets。
修改方案

修改后可正常运行的完整代码如下:

#include <stdio.h>
#include <string.h>
#include <ctype.h>
// 定义输入字符串的最大长度
#define MAX_STR_LEN 100

int main()
{
    char str[MAX_STR_LEN + 1];
    int i = 0;
    int pos = 0;
    int wordlen = 0;
    int word[60] = {0};
    printf("Please enter the string of characters: ");
    // 用安全的fgets替代废弃的gets
    fgets(str, sizeof(str), stdin);
    // 清除fgets读取到的末尾换行符
    str[strcspn(str, "\n")] = '\0';

    while(i < strlen(str))
    {
        // 读取到字母时累计当前单词长度
        if(isalpha(str[i]))
        {
            wordlen++;
            i++;
        }
        // 读取到非字母时,判断是否需要存储已读取完成的单词
        else
        {
            if(wordlen > 0)
            {
                word[pos] = wordlen;
                pos++;
                wordlen = 0;
            }
            i++;
        }
    }
    // 补充处理字符串末尾的最后一个单词(如果结尾是字母的话)
    if(wordlen > 0)
    {
        word[pos] = wordlen;
        pos++;
    }

    // 按实际单词数量输出长度
    for(i = 0; i < pos; i++)
    {
        printf("%d ", word[i]);
    }
    return 0;
}
核心修改说明
  • 修正了i的增量逻辑:每轮循环仅对i自增一次,保证遍历所有字符。
  • 重写了单词存储逻辑:只有遇到非字母且当前单词长度大于0时,才将长度存入数组,计数下标pos加1;遍历结束后额外判断是否有末尾单词未存入。
  • 补充了必要头文件、定义了字符串长度常量,替换了不安全的输入函数,处理了读取时的换行符问题。
  • 打印逻辑直接用实际的单词计数pos作为遍历上限,无需额外判断0值即可避免多余输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 16:15:00