魔咒詞典(C C )

2021-10-04 10:02:47 字數 2411 閱讀 1206

哈利波特在魔法學校的必修課之一就是學習魔咒。據說魔法世界有100000種不同的魔咒,哈利很難全部記住,但是為了對抗強敵,他必須在危急時刻能夠呼叫任何乙個需要的魔咒,所以他需要你的幫助。     給你一部魔咒詞典。當哈利聽到乙個魔咒時,你的程式必須告訴他那個魔咒的功能;當哈利需要某個功能但不知道該用什麼魔咒時,你的程式要替他找到相應的魔咒。如果他要的魔咒不在詞典中,就輸出「what?」

首先列出詞典中不超過100000條不同的魔咒詞條,每條格式為:

[魔咒] 對應功能

其中「魔咒」和「對應功能」分別為長度不超過20和80的字串,字串中保證不包含字元「[」和「]」,且「]」和後面的字串之間有且僅有乙個空格。詞典最後一行以「@end@」結束,這一行不屬於詞典中的詞條。

詞典之後的一行包含正整數n(<=1000),隨後是n個測試用例。每個測試用例佔一行,或者給出「[魔咒]」,或者給出「對應功能」。

每個測試用例的輸出佔一行,輸出魔咒對應的功能,或者功能對應的魔咒。如果魔咒不在詞典中,就輸出「what?」
示例1

[expelliarmus] the disarming charm

[rictusempra] send a jet of silver light to hit the enemy

[tarantallegra] control the movement of one's legs

[serpensortia] shoot a snake out of the end of one's wand

[lumos] light the wand

[obliviate] the memory charm

[expecto patronum] send a patronus to the dementors

[accio] the summoning charm

@end@

4[lumos]

the summoning charm

[arha]

take me to the sky

light the wand

accio

what?

what?

首先要指出的是題目存在陷阱

魔咒也就是中的內容同樣存在空格" ",因此不可以利用cin或scanf進行字串的讀取

我在這裡利用的是gets讀取一整行,然後再找到 "]" 對這一整行的字串進行分割

在這裡我用了乙個結構體儲存每一行的魔咒詞條(裡面有兩個字串乙個存魔咒乙個存功能)

建立魔咒詞典後最關鍵的就是分割輸入的字串了

利用temp臨時字串接受輸入後,利用遍歷一次字串,找到"]"的位置,用index記錄

通過觀察輸入的格式,[魔咒]後會有乙個空格與功能連線,即index+1的位置是乙個空格

我們把這個空格改為\0,方便使用strcpy函式直接進行拷貝

舉個栗子,我們第一行得到的字串在字元陣列的形式是:

[expelliarmus] the disarming charm\0  ->  [expelliarmus]\0the disarming charm\0
魔咒字串            功能字串

這樣做方便的地方就是魔咒的拷貝直接通過temp這個首位址就能完成拷貝(因為有乙個我們改的\0可以完成前半段的拷貝)

而後半段的首位址就是temp+index+1,同樣有字串本身結尾帶著的\0完成字串的拷貝

我們先把前半段和字串"@end@"比較。如果相等就直接跳出字串輸入的這個迴圈。

然後輸入整數n

注意!cin>>n輸入了乙個整數後,利用乙個\n結束了,我們要用乙個getchar()接收這個\n,否則這個\n就直接被gets()讀取,當做乙個空串存入temp中。

接著就是temp字串和詞典的比較了。

如果temp[0]是"["就和魔咒字串比,輸出功能字串。

否則和功能字串比,輸出魔咒字串(記得去掉前後的"["和"]")。

如果比到最後都沒找到,就輸出what?

最後是**

#include #include #include #include using namespace std;

struct dictionarydic[100010];

int main()

strcpy(dic[len].magic,temp);

strcpy(dic[len].func,temp+index+1);

len++;

} int n;

cin>>n;

getchar();

while(n--)

return 0;

}

1029 魔咒詞典

1029 魔咒詞典.cpp 定義控制台應用程式的入口點。題目1029 魔咒詞典 時間限制 5 秒記憶體限制 32 兆特殊判題 否提交 5097解決 1478 題目描述 哈利波特在魔法學校的必修課之一就是學習魔咒。據說魔法世界有100000種不同的魔咒,哈利很難全部記住,但是為了對抗強敵,他必須在危急...

1051 魔咒詞典

時間限制 1 sec 記憶體限制 128 mb 提交 539 解決 316 提交 狀態 討論版 哈利波特在魔法學校的必修課之一就是學習魔咒。據說魔法世界有100000種不同的魔咒,哈利很難全部記住,但是為了對抗強敵,他必須在危急時刻能夠呼叫任何乙個需要的魔咒,所以他需要你的幫助。給你一部魔咒詞典。當...

題目1029 魔咒詞典

題目1029 魔咒詞典 時間限制 5 秒 記憶體限制 32 兆 特殊判題 否 提交 3768 解決 1085 題目描述 哈利波特在魔法學校的必修課之一就是學習魔咒。據說魔法世界有100000種不同的魔咒,哈利很難全部記住,但是為了對抗強敵,他必須在危急時刻能夠呼叫任何乙個需要的魔咒,所以他需要你的幫...