输入一些单词,找出所有满足下列条件的单词;该单词不能通过重排变为输入文本的其他单词。判断时字母不分大小写,但在输出时应该保留大小写,并按字典序输出;
在进行文本输入时,每输入一个单词将他放到vector,同时开一个map,用输入的单词作key,出现的次数作为value,当然作为key的单词要先经过处理,将它小写化并按字典序排序,然后再放入key中,这样文本输完后,原始文本保存在vector中,map存放了每个标准化单词出现的次数;然后再遍历vector,将每一个单词同过map来判断是否只出现一次,如果是,则该单词是满足条件的,然后放入集合中。最后再遍历输出集合就是答案;
#include <iostream>
#include <string>
#include <cstdio>
#include <cstring>
#include <set>
#include <map>
#include <sstream>
#include <algorithm>
#include <vector>
using namespace std;
string stad(string s)
{
for(int i=0;i<(int)s.length();i++)s[i]=tolower(s[i]);
sort(s.begin(),s.end());
return s;
}
int main()
{
string s;map<string,int>st;vector<string>word;//freopen("1.txt","r",stdin);
while(cin>>s)
{
if(s[0]=='#')break;
word.push_back(s);
string pre=stad(s);
if(!st.count(pre))st[pre]=0;
st[pre]++;
}
set<string>as;
for(int i=0;i<(int)word.size();i++)
{
if(st[stad(word[i])]==1)as.insert(word[i]);
}
for(set<string>::iterator it=as.begin();it!=as.end();++it)
cout<<*it<<endl;
}