习题6-8 统计一行文本的单词个数 (15分) | PAT | C语言实现

本题目要求编写程序统计一行字符中单词的个数。所谓“单词”是指连续不含空格的字符串,各单词之间用空格分隔,空格数可以是多个。

输入格式:

输入给出一行字符。

输出格式:

在一行中输出单词个数。

输入样例:

Let's go to room 209.

输出样例:

5

代码与解析:

#include <stdio.h>//总体而言的算法是检测单词间隔的空格判断数量,然后排除特殊情况

int main() {
    int nums = 0, blank = 0, t = 0,alpha=0;//初始化几个变量,其中nums统计单词总数
    while (1) {//一直循环就是了,放到里面去处理比较统一
        char a = getchar();//不想做一个非常大的字符串所以一个个读入字符吧,a就是每次循环读入的字符
        if ((t != 0 || a != ' ')) {//t为判断是否第一次运行,若第一次运行,是空格的,则滤去这个值
            if (a == '\n') {//这里判断是否回车作为一行文本的结尾
                nums++;
                break;//是则跳出循环,并补充最后一个单词块儿的数量
            } else if (a == ' ' && blank != 1) {//如果是空格,而且他是第一次出现的话就加单词数量
                nums++;
                blank++;//顺便加一个blank值,这样就过滤了重复的空格
            } else if (a != ' ') {
                blank = 0;//当空格外的值即单词出现时blank为零,方可统计下一次单词的空格间断。
                alpha = 1;//alpha用于统计字母是否存在
            }
        }else{
			blank++;//如果出现前面一堆空格,用这个再屏蔽后面那几个空格
		}
        t = 1;//运行一次后t就永远为1,则就不会滤掉后面的空格
    }
    if (blank == 1)nums -= 1;//如果最后读入完成存在一个空格,则回车前面是以空格结尾,则滤去这个空格
    if (alpha != 1)nums =0;//如果字母不存在,即全是空格,因此单词数量为0
    printf("%d", nums);
    return 0;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值