2017吉首大学新生赛问题F:是你飘了,还是我拿不动刀了?
题目描述
Eternally给出长度在1000以内的英语文章,让你找出文章中的单词,按照英语的格式是每个单词是以空格分开的,但是呢,在这里不同,每个单词是以除大小写字母以外的字符来分开的。
例如Eternally#is#a#student中Eternally,is,a,student是单词。
(不必多想,Eternally输入的文章中的每个单词有可能在英语中不是单词)。
输入
输入包含多组输入,每行是一篇文章(文章,是没有空格的)。
输出
输出有特定的格式,输出单词时请按照单词在文章中的顺序输出单词。(如果同一个单词有多个,那么就只输出最先出现的那个),如果是Eternally开玩笑给的文章中没单词,那么输出NO.
样例输入
Eternally@is@a@student
样例输出
Case 1:
Eternally
is
a
student
题目分析:水题,数据看起来不大,直接暴力搜索,查询。
#include<bits/stdc++.h>
int main()
{
char a[2005] ,b[1000][100] ,c[100];//读入字符串存入a字符串。
int i , j ,cnt = 1 ,t ,k;
while(~scanf("%s",a))
{
j = t = 0;
printf("Case %d:\n",cnt++);
for(i = 0;a[i]!= '\0';i++)
{
if((a[i] > 64 &&a[i] < 91)|| (a[i] > 96 &&a[i] < 123))//注意:只要不是英文字母,就是分隔符
c[j++] = a[i]; //将每个单词存入c字符串
else //若遇到分隔符,则将前面存储在c字符串中的单词与单词库中的单词比较
{
c[j] = '\0';
for(k = 0;k <= t;k++)
{
if(!strcmp(c,b[k]))
break;
}
if(k > t) //若单词库中没有该单词,则输出,并保存在单词库b中
{
printf("%s\n",c);
strcpy(b[++t],c);
}
j = 0;
}
}
c[j] = '\0';
for(k = 0;k <= t;k++) //验证最以后一个存入c中的单词是否存在b单词库中
{
if(!strcmp(c,b[k]))
break;
}
if(k > t)
{printf("%s\n",c); t++;}
if(!t) //一个单词都没有,则输出NO
printf("NO\n");
}
return 0;
}