C语言入门编程题:单词的长度(C语言版);fgets()函数来代替gets()函数

1.题目描述


输入一行单词序列,相邻单词之间由1个或多个空格间隔,请对应地计算各个单词的长度。
注意:如果有标点符号(如连字符,逗号),标点符号算作与之相连的词的一部分。没有被空格间开的符号串,都算作单词。

2.输入格式


一行单词序列,最少1个单词,最多 300 个单词,单词之间用至少1个空格间隔。单词序列总长度不超过1000.

3.输出格式


依次输出对应单词的长度,之间以逗号间隔。

4.输入输出样例

1.输入
She was born in 1990-01-02  and  from Beijing city.
2.输出
3,3,4,2,10,3,4,7,5

5.代码:

#include <stdio.h>
#include <string.h>

int main() {
    char input[1001];

    // 使用fgets安全读取输入
    if (fgets(input, sizeof(input), stdin) != NULL) {
        int len = strlen(input);
        int i, word_len = 0;

        for (i = 0; i < len; i++) {
            // 检查是否是字母或数字,或者其他标点符号(包括-和.等)
            if ((input[i] != ' ' && input[i] != '\n' && input[i] != '\r')) {
                word_len++; // 统计当前单词的长度
            } else if (word_len > 0) {
                // 当遇到空格且当前单词长度大于0时,输出单词长度
                printf("%d", word_len);
                if (i < len - 1) {
                    printf(","); // 在输出后面加逗号,除非是最后一个单词
                }
                word_len = 0; // 重置单词长度计数器
            }
        }

        // 如果最后有一个单词没有被处理
        if (word_len > 0) {
            printf("%d", word_len);
        }
    }

    return 0;
}

6.注意点:

在C语言中,gets()函数已经被废弃,不推荐在实际代码中使用。这是因为gets()函数存在安全漏洞,可能导致缓冲区溢出。取而代之的是使用fgets()函数来代替gets()函数。

fgets()函数从指定的流中读取一行,并把它存储在字符串指针所指向的字符数组中。fgets()函数的原型如下:

char *fgets(char *str, int size, FILE *stream);

 

1.str:指向一个字符数组的指针。

2.size:要读取的字符数。

3.stream:指向FILE对象的指针,指示要从中读取的文件流。通常传入stdin表示标准输入流。

使用fgets()函数可以确保从输入中读取行,并将其存储到指定的字符数组中,从而防止缓冲区溢出。

以下是一个简单示例,演示如何使用fgets()函数来代替gets()函数:

#include <stdio.h>

int main() {
    char str[100]; // 分配足够大的缓冲区来存储输入行
    printf("请输入字符串:\n");
    fgets(str, sizeof(str), stdin); // 从标准输入流中读取一行

    printf("你输入的字符串是: %s", str);

    return 0;
}

  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值