經典的查字典題+經典的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;
}