uva 156 - Ananagrams

思路:

1.先读取单词,把单词都整齐一下,从大写变为小写

2.把单词按字母进行排序

3.判断接下来的单词和前面的单词是否重复

 1 #include<iostream>
 2 #include<string>
 3 #include<sstream>
 4 #include<vector>
 5 #include<algorithm>
 6 using namespace std;
 7 vector<string> newwords;
 8 vector<int>    num;
 9 vector<string> oldwords;
10 int main(){
11     string l;
12     vector<string>::iterator it;
13     while(getline(cin,l)){
14         if(l[0]=='#')
15             break;
16         istringstream iss(l);
17         for(string temp;iss>>temp;){
18             string oldtemp=temp;
19             
20             for(int i=0;i<temp.size();i++)
21                 if(isupper(temp[i]))
22                     temp[i]+=32;
23             for(int i=0;i<temp.size();i++){
24                 for(int j=0;j<temp.size();j++){
25                     if(temp[i]<temp[j]){
26                         char c=temp[i];
27                         temp[i]=temp[j];
28                         temp[j]=c;
29                     }
30                 }
31             }
32             it=find(newwords.begin(),newwords.end(),temp);
33             if(it==newwords.end()){
34                 newwords.push_back(temp);
35                 num.push_back(1);
36                 oldwords.push_back(oldtemp);
37             }
38             else{
39                 num[it-newwords.begin()]++;
40             }
41 
42         }    
43     }
44     newwords.clear();
45     it=oldwords.begin();
46     for(int i=0;i<num.size();i++,it++){
47         if(num[i]==1){
48             newwords.push_back(*it);
49         }
50     }
51     sort(newwords.begin(),newwords.end());
52     for(int i=0;i<newwords.size();i++)
53         cout<<newwords[i]<<endl;
54     //system("pause");
55 }

 

posted on 2013-12-26 20:12  云在心  阅读(190)  评论(0)    收藏  举报

导航