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:感觉自己写的还不是很规范,请大牛指点一下错误
浙公网安备 33010602011771号