~题目链接~
http://acm.sdut.edu.cn/sdutoj/showproblem.php?pid=1500&cid=1183
std::string字符串大小写转换~http://www.haogongju.net/art/2158882
ai枫 的博客 http://www.cnblogs.com/luyingfeng/p/3161649.html
输入
5 3 Inkfish Henry Carp Max Jericho Carp Max Carp 0
结果
3
(1).multimap多重映照容器 + std::transform函数
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<map> #include<string> #include<iostream> #include<algorithm>//包括各种数据结构的具体元素检索、替换、逆序等等通用的算法 using namespace std; int main() { int n,m; string str; while(~scanf("%d",&n)&&n!=0) { map<string,int> Q; scanf("%d",&m); int k=0; for(int i=0; i<n; i++) { cin>>str; transform(str.begin(),str.end(),str.begin(),::tolower); /*transform(str.begin(), str.end(), str.begin(), ::tolower); //将大写的都转换成小写 transform(str.begin(), str.end(), str.begin(), ::toupper); //将小写的都转换成大写 transform(str.begin(), str.end(), str.begin(), exchange); //大小写切换*/ Q.insert(pair<string,int>(str,1));//插入元素 } for(int i=0; i<m; i++) { cin>>str; transform(str.begin(),str.end(),str.begin(),::tolower); if(Q.find(str)!=Q.end())//查找键值 { if(Q[str]) { Q[str] = 0; k++; } } } printf("%d ",n-k); } }
(2).map容器
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<map> #include<string> #include<iostream> #include<algorithm> using namespace std; void updata(char *str ) { int i,len=strlen(str); for (i=0; i<len; i++) { if( str[i]<='z' && str[i] >='a') str[i]=str[i]-'a'+'A'; } } int main() { int n,m; while(~scanf("%d",&n)&&n!=0) { map<string,int>Q; char str[12]; scanf("%d",&m); int k=0; for(int i=0; i<n; i++) { scanf("%s",str); updata(str); Q[str]++; } for(int i=0; i<m; i++) { scanf("%s",str); updata(str); if(Q[str]) { Q[str]=0; k++; } } printf("%d ",n-k); } return 0; }