ACM STL应用-——小安的字典set

原题链接:

          http://newoj.acmclub.cn/problems/1690

题目描述:

小安很喜欢英语,她渴望有一本自己独特的字典,但写一本字典并不容易,所以她想出了一个办法:从她最喜欢的一本书中挑出所有不同的单词,按照字典序排列一下就完成了字典的雏形啦。可是,这是一个很大的工程量,为了不让妹子失望,你打算写个程序来完成她的梦想。

你的程序要求按字典序列举出给定输入文本中的所有单词,这个问题中,一个单词的定义是一连串大写或小写字母,单词也可能只有一个字母。同时你还要注意大小写问题,比如“Apple”,“apple” 或 “APPLE”是一样的。

输入:

输入不超过5000行的文本(英文),每行不超过200个字母,输入以EOF终止

输出:

输出文本中出现的不同单词的列表,按字典序排列,一行一个单词,并且都是小写,可以确定的是文本中的单词不超过5000个。

样例输入

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.

样例输出

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

解题思路:

        在这个过程中,需要一个一个字符的接收数据,使用getchar()函数,直到接收到的数据为EOF为止,windows下的EOF就是新行按下ctrl+z,

        判断接收到的是不是字母,如果是小写字母的话,就直接连接到一个字符串上,如果是大写字母的话,就先转换成小写字母,再连接到字符串上,

        如果不是字母的话,就将字符串插入到set中,并将字符串初始化为"".

        需要注意的是,set中的第一个元素是"",所以要从第二个元素开始遍历。

        原因:“”的ascii值要比字母的小,而且在程序运行过程中将字符串初始化成了"",如果下一个字符不是字母的话,那“”就会被插入到set中

代码:

      

#include <bits/stdc++.h>
//大小写字母的转换 大写字母+32=小写字母  小写字母-32=大写字母 
using namespace std;
int main(){
	set<string> s1;
	set<string>::iterator t1,t2;
	char s2;
    string s3;
   while((s2=getchar()) != EOF){
   		
   	if(s2 >= 'a'&&s2 <= 'z'){
   		 s3=s3+s2;

	   }
	else if(s2 >= 'A'&&s2 <= 'Z'){
		 s2+=32;
		 s3=s3+s2;
		 //cout<<s3<<endl;
	}
	 else{
	 	//cout<<s3<<endl;
		s1.insert(s3);//set集合中不允许有重复元素,所以这样存储是不会出现问题的 
		s3="";
	//	cout<<s3;
	}
	
   }
  // cout<<"yes";
  // int count=s1.size();
   //cout<<count;
   t1 = s1.begin();
   t2 = s1.end();
   for(t1 = ++t1;t1 != t2;t1++)
    cout<<*t1<<endl; 
	return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值