2022.3.25

//做的第一个关于map的题,输入一些单词,按字典序输出其中不能通过重排与其他单词相同的单词,比较时不分大小写,但是输出时应保留原格式。
#include<iostream>
#include<algorithm>
#include<string>
#include<vector>
#include<map>
using namespace std;
map<string,int>map1;
vector<string>words;
vector<string>ans;
string s;
string bzh(string &s)//标准化的思想,使每个单词都变成小写且按字典序打乱以方便比较
{
string ans=s;
for(int i=0;i<ans.length();i++)
{
ans[i]=tolower(ans[i]);
}
sort(ans.begin(),ans.end());
return ans;
}
int main()
{
while(cin>>s)
{
if(s[0]=='#')
break;
words.push_back(s);//存储单词的原格式
string r=bzh(s);//标准化输入的单词
if(!map1.count(r))//判断是否已经在映射中存在,不存在则构建一个映射。
map1[r]=0;
map1[r]++;//如果出现重复,映射对应的值不为一,输出的时候通过判断条件舍弃。
}
for(int i=0;i<words.size();i++)
{
if(map1[bzh(words[i])]==1)//比较每个单词标准化后在映射中的值,为1则证明符合条件
ans.push_back(words[i]);
}
sort(ans.begin(),ans.end());
for(int i=0;i<ans.size();++i)
cout<<ans[i]<<"\n";//排序并输出,完工。
return 0;
}

//map.count(r)为输出r在map中出现的次数,一般只有1,0。

posted @ 2022-03-25 16:30  noname5588  阅读(53)  评论(0)    收藏  举报