Xenia呐 2024-05-03 00:39 采纳率: 33.3%
浏览 7

统计一行文本的单词个数

统计一行文本的单词个数
本题目要求编写程序统计一行字符中单词的个数。所谓“单词”是指连续不含空格的字符串,各单词之间用空格分隔,空格数可以是多个。
请问我写的代码有什么问题吗?输入数据运行好像没问题啊?

img


#include <stdio.h>
int main()
{
    char a[100];
    gets(a);
    int i,flag,count=0;   //flag=0表示非空格
    for (i=0;a[i]!='\0';i++){
        if (a[i]==32) flag=1;
        else flag=0;
        if (flag==0){
            if (i==0 || a[i-1]==32) count+=1;
        }
    }
    printf("%d\n",count);
    return 0;
}
  • 写回答

5条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-05-03 00:39
    关注

    引自免费微信小程序:皆我百晓生

    在您的C语言代码中,存在一些逻辑上的小问题,导致在某些特定情况下可能无法正确地计算单词数量。以下是修改后的代码:

    #include <stdio.h>
    #include <ctype.h> // 需要包含这个头文件以使用isspace函数
    
    int main()
    {
        char a[100];
        fgets(a, sizeof(a), stdin); // 使用fgets替代gets,因为它更安全
        int i, flag = 0, count = 0; // flag=0表示非空格
        for (i = 0; a[i] != '\0'; i++)
        {
            if (!isspace((unsigned char)a[i])) // 使用isspace函数检查是否为空白字符
            {
                if (i == 0 || isspace((unsigned char)a[i - 1])) // 检查前一个字符是否为空白字符
                    count += 1;
                flag = 1;
            }
            else
            {
                flag = 0;
            }
        }
    
        // 处理最后一个单词(可能在字符串末尾)
        if (flag)
            count += 1;
    
        printf("%d\n", count);
        return 0;
    }
    

    更改点:

    1. gets替换为fgetsgets函数容易引发缓冲区溢出的安全问题,而fgets允许指定读取的最大长度,更安全。
    2. 引入<ctype.h>头文件:为了使用isspace函数,它用于判断字符是否为空白字符(包括空格、制表符和换页符等)。
    3. 修改判断条件:使用isspace函数进行空白字符判断,并且对前一个字符也进行了空白字符检查,确保了正确计数。

    现在,这段代码应该能处理各种情况下的单词计数问题。您可以尝试使用不同的测试数据再次运行,看看是否符合预期。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 5月3日

悬赏问题

  • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
  • ¥15 安装quartus II18.1时弹出此error,怎么解决?
  • ¥15 keil官网下载psn序列号在哪
  • ¥15 想用adb命令做一个通话软件,播放录音
  • ¥30 Pytorch深度学习服务器跑不通问题解决?
  • ¥15 部分客户订单定位有误的问题
  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
  • ¥15 Bug traq 数据包 大概什么价
  • ¥15 在anaconda上pytorch和paddle paddle下载报错
  • ¥25 自动填写QQ腾讯文档收集表