UVA642 Word Amalgamation(查字典類)

經典的查字典題+經典的map應用

題目描述

在美國各地的數百萬份報紙中,有一款名爲Jumble的文字遊戲。 這個遊戲是要解決一個謎語,但爲了找到答案中出現的字母來解讀四個字是必要的。 你的任務是編寫一個可以解讀單詞的程序。

輸入

輸入文件包含4個部分: 1、字典,由至少一個,最多100個字組成,每行一個; 2、包含′XXXXXX′的行,表示字典的結尾; 3、一個或多個你必須解讀的混亂的“單詞”,每個單詞都在一條線上; 4、包含'XXXXXX'的另一行,它表示文件的結尾。 所有單詞,包括字典單詞和加擾單詞,僅由小寫英語組成字母,長度至少爲一個,最多六個字符。(注意,哨兵'XXXXXX'包含 多個大寫X'。) 字典不一定按排序順序,但字典中的每個單詞都是獨特的。

輸出

對於輸入中的每個加擾字,輸出可以是的所有字典單詞的字母列表。 通過重新排列亂碼中的字母而形成的。此列表中的每個單詞都必須出現在一行中通過它自己。 如果列表爲空(因爲不能形成字典單詞),則輸出“NOT A VALID WORD”有效的話,就不用輸出。 在任何一種情況下,輸出一個包含六個星號的行來表示列表的結尾。

輸入輸出樣例

輸入 #1複製

tarp
given
score
refund
only
trap
work
earn
course
pepper
part
XXXXXX
resco
nfudre
aptr
sett
oresuc
XXXXXX

輸出 #1複製

score
******
refund
******
part
tarp
trap
******
NOT A VALID WORD
******
course
******

思想總結:對字典進行映射,將要寫入的詞進行排序作爲唯一的key,實際的詞作爲value。相同字母得到同一個key,而value則不同。

#include<bits/stdc++.h>
using namespace std;

struct node{
	string word[105];//相同字母的拼音 
	int count=0;//第幾個拼音 
};

map<string,node> dict; //string爲排序後的拼音,node爲原拼音 
int main(){
	
	//寫入字典 
	string s,temp;
	while(cin>>s&&s!="XXXXXX"){
		temp=s;//保存排序後的拼音 
		sort(temp.begin(),temp.end());
		dict[temp].word[dict[temp].count]=s;
		dict[temp].count++;
	}
	
	//比對字典 
	while(cin>>s&&s!="XXXXXX"){
		temp=s;
		sort(temp,temp.end());
		if(dict[temp].count!=0){//存在 
			sort(dict[temp].word,dict[temp].word+dict[temp].count);//word[]數組,則word就代表首地址 
			for(int i=0;i<dict[temp].count;i++){
				cout<<dict[temp].word[i]<<endl;	
			}	
			cout<<"******"<<endl;			
		}else{
			cout<<"NOT A VALID WORD"<<endl;
			cout<<"******"<<endl;
		}
	}
	return 0; 
} 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章