/* * UVA_156.cpp * * Created on: 2013年11月1日 * Author: Administrator */ #include <iostream> #include <cstdio> #include <map> #include <vector> #include <algorithm> using namespace std; int main(){ multimap<string,string> r;//multimap与马培德不同之处就在于,它的key允许重复元素的出现 string t; while(cin >> t,t != "#"){ string t_copy(t); int len = t_copy.length(); int i; for(i = 0 ; i < len ; ++i){ t_copy[i] = tolower(t_copy[i]); } // sort(t_copy,t_copy+len);//这种可以用于C风格的字符串的排序,但用于C++风格的字符串可能会出错 sort(t_copy.begin(),t_copy.end());//C++风格的字符串\STL中的允许随机存取的数据结构可以使用这一种方式进行排序 r.insert(make_pair(t_copy,t));//map可以通过pair对象来维护key/value. } vector<string> ans; for(map<string,string>::iterator it = r.begin(); it != r.end() ; ++it){ if(r.count((*it).first) == 1){//r.count(str): 返回str在map中出现的次数 ans.push_back((*it).second); } } // sort(ans,ans + size); sort(ans.begin(),ans.end()); int size = ans.size(); int i; for(i = 0 ; i < size ; ++i){ // printf("%s\n",ans[i]); cout<<ans[i]<<endl;//无论是map还是vector有支持这种下标的访问方式 } return 0; }
这道题的思路就是: 每读取一个字符串的同时,就把一个该字符串小写&&排序以后的字符串与该字符串存进一个multimap中。。然后再遍历multimap,把里面key只出现一次的元素找出来存在一个vector中即可。。。。。