UVA 10815 Andy's First Dictionary

本博客介绍了一个简单的编程挑战,任务是通过处理输入文本,提取并按字典序输出所有不同的英文单词(忽略大小写)。使用C++实现,通过逐字符读取并利用set容器来确保单词的唯一性和有序性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Andy's First Dictionary
Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu

Description

Problem B: Andy's First Dictionary

Time limit: 3 seconds


Andy, 8, has a dream - he wants to produce his very own dictionary. This is not an easy task for him, as the number of words that he knows is, well, not quite enough. Instead of thinking up all the words himself, he has a briliant idea. From his bookshelf he would pick one of his favourite story books, from which he would copy out all the distinct words. By arranging the words in alphabetical order, he is done! Of course, it is a really time-consuming job, and this is where a computer program is helpful.

You are asked to write a program that lists all the different words in the input text. In this problem, a word is defined as a consecutive sequence of alphabets, in upper and/or lower case. Words with only one letter are also to be considered. Furthermore, your program must be CaSe InSeNsItIvE. For example, words like "Apple", "apple" or "APPLE" must be considered the same.

Input

The input file is a text with no more than 5000 lines. An input line has at most 200 characters. Input is terminated by EOF.

Output

Your output should give a list of different words that appears in the input text, one in a line. The words should all be in lower case, sorted in alphabetical order. You can be sure that he number of distinct words in the text does not exceed 5000.

Sample Input

Adventures in Disneyland

Two blondes were going to Disneyland when they came to a fork in the
road. The sign read: "Disneyland Left."

So they went home.

Sample Output

a
adventures
blondes
came
disneyland
fork
going
home
in
left
read
road
sign
so
the
they
to
two
went
were
when


Joke and image taken from the Web


题目大意:就是输入一篇文章,全英文(有大小写),要求不重复地按字典序输出所有单词(全部转化为小写)

思路:字符串处理的模拟题.

我的做法是一个一个读取字符,但是突然碰到一件事很蛋疼:T_T,我的ctrl+z键坏了,没反应:囧.于是乎调试搞了小小功夫.

<注意了,如果适合用gets 的时候(即一行一句话不会有回车),那么其实最后还要读取一次tmp这个string的,因为读取到tmp的尽头,这个时候没有碰到非字母的字符,读取循环也会结束的>

读取到每一个单词之后直接插入到set容器就可以了,还没有具体了解这个stl 内部是怎么运作的,不过和强大是晓得的.



AC Program:

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<set>
using namespace std;
string tmp; 
struct cmp
{
   bool operator() (string s1, string s2) const 
   {
      return   s1.compare(s2)<0 ;
   }
};
void printSet(set<string,cmp>s)
{

 set<string,cmp>::iterator iter;//也是迭代器 
 for (iter = s.begin(); iter != s.end(); iter++)
      cout<<*iter<<endl;
}
int main()
{
//freopen("f.in.txt","r",stdin);
//freopen("f.out.txt","w",stdout); 调试所用 
set<string,cmp> s;//类似于map的写法 
char input;
tmp="";//初始化tmp
while((input=getchar())!=EOF)
{
    
         
        if(input<='z'&&input>='a')
            tmp+=input;
        else if(input<='Z'&&input>='A')
            tmp+=input+32;//转小写 
        else
            {
              if(tmp!="") 
                  s.insert(tmp);//插入set容器  
              tmp="";//赋值为空,即使单个单词一次读取完毕
                             
            }       
    
    //if(tmp!="")//当适合用gets的时候必须要 
       //s.insert(tmp);
                      
} 
printSet(s);
//system("pause");
return 0;}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值