题目描述
给一个字符串,请判断字符串是否出现了所有的英文字母(不区分大小写)。
输入
每行一个只含英文字母的字符串,长度不超过1000。
输出
每行输出一个样例的结果,如果出现了所有的字符串,输出“Yes”,否则输出“No”。(不需要输出引号)
样例输入
ProgrammingPratice TheQuickBrownFoxJumpsOverLazyDog
样例输出
No Yes
提示
巨大的输入量,请使用C风格的输入
我的思路:
首先判断是否超过26个字母,如果没有,则直接输出no
如果超过,再去遍历数组如果和之前的字母不一样就加一,如果加到26就停止输出yes,如果遍历完都没加到就输出no。
显而易见很麻烦,首先要将字符串转为数组,然后再准备一个数组去保存,如何遍历也是很麻烦的过程。
正确思路
一个函数搞定,先都变成小写字母(tolower),然后在判断是不是字母(isalpha),如果是相应的count就加1,简洁明了。/(ㄒoㄒ)/~~
#include<stdio.h>
#include<string.h>
#include<ctype.h>
int containsAllLetters(char *str){
//26个字母计数数组
int count[26]={0};
//将所有的字母转换为小写
for(int i=0;str[i]!='\0';i++)
{
char c=tolower(str[i]);//转换为小写
if(isalpha(c))//判断是否是字母
{
count[c-'a']++;
}
}
for(int i=0;i<26;i++)
{
if(count[i]==0)
return 0;
}
return 1;
}
int main()
{
char str[1000];
while(scanf("%s",str)!=EOF)
{
if(containsAllLetters(str))
printf("Yes\n");
else
printf("No\n");
}
return 0;
}