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 }
浙公网安备 33010602011771号