XTU-OJ 1281-Cute String

文章讲述了如何编写一个程序来判断Alice能否记住包含超过10个单词或10种字母(不区分大小写)的句子,使用C语言实现,通过gets()输入并统计空格和字符种类。
摘要由CSDN通过智能技术生成

题目描述

Alice的记忆力不太好,如果一个句子中含的单词(每个单词之间用一个空格隔开)数量超过10,或者句子中字母种类(不区分大小写)超过10个,她就会记不住。现在给你若干个句子,请写个程序判断一下Alice是否能记住这些句子。

输入

存在多个样例。
每行输入一个字符串,表示句子。字符串长度不超过200,只含英文字母和空格。
输入数据保证每个单词之间只有一个空格,行末没有空格。

输出

对于每个样例,能记住,输出“Yes”,否则输出“No”。

样例输入

Alice is a smart girl
but she is bad in memory
a b c d e f g h i j
A B C D E F G H I J K

样例输出

Yes
No
Yes
No

解题思路:gets() 输入,数组遍历

 本题一不知道输入长度,二字符串中又有空格,所以    scanf("%c"),scanf("%s") 好像都不能用,所以要换 gets() 输入,而又问 好像我以前的代码 都会加一个 scanf() != EOF 这次为什么 是 gets() != NULL 了?因为 scanf() 和 gets() 都有一个返回值,而两者返回值类型又是不一样的,具体的自行查找。

输入之后,剩下的只需要遍历一遍数组,记录 出现的空格数 和 出现过的字符种类数。如果任意一个超过条件,则输出 No,否则输出 Yes。

AC代码:

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

int cnt1, cnt2, len;
char str[210];

int main()
{
    while ( gets(str) != NULL)
    {
        bool books[30] = {0};
        cnt1 = cnt2 = 0;
        len = strlen(str);
        for (int i = 0; i < len; i ++)
        {
            if (str[i] == ' ')         {cnt1 ++; continue;}
            if (str[i] >= 97)          str[i] -= 32;    // ASCII码,统一字符为大写
            if (!books[str[i]-'A'])    cnt2 ++;
            books[str[i]-'A'] = true;
        }
        if (cnt1 >= 10 || cnt2 >= 11)
                puts("No");
        else    puts("Yes");
    }
    return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值