题意:对于给定的一个字典,‘#’结束,大小写混杂,按照字典序输出打乱顺序也无法得到另外一个字典里的单词(不区分大小写)的词(按照原本的大小写)。
通过分析题意可知,需要有保留原貌的字符串,所以,以字符串的小写字典序为key值,原型为value进行multimap存储。count得到1的单词放入set中自动进行字典序排序,然后输出。
上代码:
#include <cstdio>
#include <map>
#include <set>
#include <string>
#include <algorithm>
#include <iostream>
using namespace std;
int main()
{
string s1,s2;
set <string> ans;
set <string>::iterator iter;
multimap <string,string> mp;
multimap <string,string>::iterator it;
int len,i;
while(cin>>s1){
if(s1[0]=='#')
break;
s2=s1;
len=s2.size();
for(i=0;i<len;i++)
if(isupper(s2[i]))
s2[i]=tolower(s2[i]);
sort(s2.begin(),s2.end());
mp.insert(make_pair(s2,s1)); //s2为‘标准样式’
}
for(it=mp.begin();it!=mp.end();it++)
if(mp.count(it->first)==1) //对multimap的键值计数
ans.insert(it->second); //count为1的pair的value(原型)插入到set中
for(iter=ans.begin();iter!=ans.end();iter++)
cout<<*iter<<endl; //string类只能用输入输出流
return 0;
}