9. Decode the Mad man (CPE10425, UVA10222) - CPE一顆星解答與說明

   👉  CPE 一顆星選集列表(49題) 題目說明與解答


題目



  • 寫程式來解碼(decode)瘋狂老教授的語言

輸入說明



  • 有一筆測試資料,是編碼(encoded)過後的訊息
  • 其中包含一個或多個單字




輸出說明


  • 將解碼後的文字輸出
  • 在標準鍵盤(standard keyboard)上,找到該測試資料的字母(letter)或標點符號(punctuation symbol),並取代成鍵盤上左邊第二個的字母


解題技巧

  • 注意鍵盤上的英文與符號的按鍵位置與順序,尤其是最左邊往前推會讀取上一排的最後面
  • 觀察「 ` 1」 符號左移後的變化,題目並沒有講
    • 透過瘋狂程設的自訂測資 觀察 「 ` 1」符號解碼的結果,發現每次「 ` 」解碼結果都太一樣

  • 官方的程式碼,沒有處理「位置 減 2 小於 0 的問題」






解題過程

取得者輸入

  • 使用 while 迴圈與 scanner.hasNextLine(),偵測使用者是否有輸入資料
  • 當使用者輸入資料時
    • 使用 scanner.nextLine() 取得整行句子
    • 使用 String 類別本身提供的 toLowerCase() 方法,將句子轉成小寫

建立鍵盤字串

  • 將鍵盤文字拉平,建立標準鍵盤的所有文字,從左上的「 ` 」符號開始,由左而右,由上而下,一直打到 「 / 」符號結束
  • 遇到反斜線 「 \」 ,要打成 「 \\」
    • 跳脫字元 Escape Sequence
    • 使用字串時,有一些特殊字元無法表示,需使用「\」,來表達特殊字元



分析 text 句子中的字元

  • 使用 for 迴圈,產生從第一個 ~ 最後一個字元的位置
  • 使用 String 類別提供的 charAt() 方法來取得句子中的每一個字元

檢查字元是否存在標準鍵盤中

  • 先找出句子中的字元,位於標準鍵盤字串中的哪個位置,使用 String 類別提供的 indexOf() 方法,會指出該字元的開始位置。如果沒有找到則返回 -1 
    • 有找到字元在標準鍵盤字串中的位置:使用 charAt() 方法,讀取「字元位置 - 2 」的字元
    • 沒有找到字元在標準鍵盤字串中的位置:直接將字元印出,例如空白

留言

這個網誌中的熱門文章

CPE 一顆星選集題目說明與解答 - Java 筆記與心得分享

Visual Studio 自動排版格式化程式碼

1. Vito's family (CPE10406, UVA10041) - CPE一顆星解答與說明