foj 1475 不同的单词

Problem Description

给出一个英文单词的列表,计算有多少不同的单词在列表中。

Input

本题有多组输入数据,你必须处理到EOF为止
每组数据的第一行有一个整数n, 1<=n<=1000.下面的n行每行一个单词,每个单词的长度不超过20。单词大小写忽略。

Output

每组数据输出一个整数,表示不同的单词数。

Sample Input

5
FZU
FzU
LOY
BNh
FZU

Sample Output

3

这道题感觉主要难点是在于计算不同个数,我也是没想出用具体什么算法,后来就使用了map和set的有关用法

以下是map用法

#include<iostream>
#include<map>//头文件
#include<cstring>
using namespace std;
int main()
{
	int n;
	string s;
	map<string,int>m;//
	while(cin>>n)
	{
		getchar();//储存回车,也可以没有这个语句,因为使用了cin似乎会吧回车符过滤掉
		
		m.clear();//将其清空
		while(n--)
		{
			cin>> s;//输入数组也可以用get(s)
			for(int i=0;i<s.length();i++) s[i]=tolower(s[i]);//统一成小写,大写是toupper
			m[s]++;//自我理解会将重复的字符过滤掉,然后再加起来
		}
		cout<<m.size() <<endl;//输出其大小
		
	}
	return 0;
}

以下是使用set的代码

/*大同小异
注意头文件*/
#include<iostream>
#include<cstring>
#include<set>
using namespace std;
int main()
{
	int n,i;
	set<string>s;
	char c[21];
	while(cin>>n)
	{
		s.clear();
		while(n--)
		{
			cin>>c;
			int len=strlen(c);
			for(i=0;i<len;i++) c[i]=tolower(c[i]);
			s.insert(c);//改成插入字符	
		}
		cout<<s.size()<<endl;
		
	}
	return 0;
} 

目前只了解这么多

附上大佬的连接

map

set

ps:感觉自己写的还不是很规范,请大牛指点一下错误

posted on 2017-04-03 14:06  linese-d  阅读(364)  评论(0)    收藏  举报

导航