湘大 XTU OJ 1260 Completed String 题解(非常详细):建立数组下标和数组元素之间的映射关系 ~scanf

一、链接

1260 Completed String

二、题目

题目描述

给一个字符串,请判断字符串是否出现了所有的英文字母(不区分大小写)。

输入

每行一个只含英文字母的字符串,长度不超过1000。

输出

每行输出一个样例的结果,如果出现了所有的字符串,输出“Yes”,否则输出“No”。(不需要输出引号)

样例输入

ProgrammingPratice
TheQuickBrownFoxJumpsOverLazyDog

样例输出

No
Yes

提示

巨大的输入量,请使用C风格的输入

三、题意

判断字符串是否出现了所有字母,如果出现了就输出yes,否则输出no

四、代码

c++代码

#include

using namespace std;

char op[1000+10];
int a[1000];

int main()
{
	while(~scanf("%s",op))
	{
		for(int i=0;i<1010;i++)
		{
			if(op[i]>=65&&op[i]<=90)	op[i]+=32;
			
			if(op[i]>=97&&op[i]<=122)	
			{
				int num=op[i];
				a[num]++;
			}
		}
		
		bool flag=false;
		for(int i=97;i<=122;i++)
		{
			if(a[i]==0)	
			{
				printf("No\n");
				//printf("%d\n",i);
				flag=true;
				break;
			}
		}
		
		if(flag==false)	printf("Yes\n");
		
		for(int i=97;i<=122;i++)	a[i]=0;
	}
	
	return 0;
}

c语言代码

#include
#include

char op[1000+10];

int a[200];

int main()
{
    while(~scanf("%s",op))
    {
        for(int i=0;i<1010;i++)    
        {
            if(op[i]>=65&&op[i]<=90)    op[i]+=32;
            
            if(op[i]>=97&&op[i]<=122)    
            {
                int temp=op[i];
                a[temp]++;
            }
        }
        
        bool flag=false;
        for(int i=97;i<=122;i++)
        {
            if(a[i]==0)
            {
                flag=true;
                printf("No\n");
                break;
            }
        }
        
        if(flag==false)    printf("Yes\n");
        
        for(int i=97;i<=122;i++)    a[i]=0;
    }
    
    return 0;
}

五、总结

1.一直输入就使用这一行代码,如果不加~会出现Output Limit Exceed

while(~scanf("%s",op))

2.把所有大写字母转换成小写字母,遍历字符串找到了小写字母,就把小写字母作为下标的另一个数组的值增加一

3.遍历小写字母作为下标的数组元素,如果有一个数组元素的数值是0,就表示没有用到所有字母,就输出no,并且做一下标记

4.把小写字母作为下标的数组元素重置为零

5.这个道题目还是比较简单,主要难点就是建立数组下标和数组元素之间的关系,数组下标表示小写字母的ASCII码数值,数组元素的数值大于等于1,就表示出现了这个字母

六、精美图片

湘大 XTU OJ 1260 Completed String 题解(非常详细):建立数组下标和数组元素之间的映射关系 ~scanf_第1张图片

 

你可能感兴趣的:(算法竞赛,湘大,XTU,OJ,算法,数据结构)