題目:http://e-tutor.itsa.org.tw/e-Tutor/mod/programming/view.php?a=15926
QWERTY
問題描述 :
輸入一段文字 ( 限制為 ASCII 表中,編號 32 至 125 之字元 ) ,將它們每個字元依照鍵盤的位置,印出它們右邊的字元,若右邊按鍵有兩層字元 ( 如 : 和 ; 位於同一按鍵上 ) ,則輸出下層字元,即 ”;” ,若該按鍵為上層字元 ( 如 !) 則輸出其右邊按鍵之上層字元 ( 如 @) ,若輸入的字元右邊的鍵為不可視按鍵,如 shift, enter,backspace 或右邊已無按鍵,如不做更動,照樣輸出。
輸入說明 :
輸入一行鍵盤上屬於 ASCII 表中編號 32 至 125 之字元,並以 enter 結束該行。
輸出說明 :
輸出該行每個字元右邊位置的文字,除題目所述之例外字元除外。
最後必須有換行
範例 :
輸入範例 |
輸出範例 |
Qwer |
wert |
Adgj |
sfhk |
ehn6 |
rjm7 |
這題最麻煩的就是,要怎麼把得知輸入的字元在鍵盤的位置是哪裡,而且它的右邊是甚麼
要解決這個問題,只要把鍵盤的符號全部存進陣列就OK了
從輸入開始
不知道輸入有多長,所以用string
題目的輸入範例有大寫
但範例輸出是小寫,所以要把輸入中的大寫都轉成小寫
而陣列就是這樣
string a="!@#$%^&*()_++`1234567890-=={}||qwertyuiop[]\\:""asdfghjkl;''<>??zxcvbnm,.//";
有的符號重複的意義是它在鍵盤的最右邊,
所以就算右移也仍是自己
沒有存大寫字母是因為都會被轉成小寫
input[i]=tolower(input[i])就是把大寫轉成小寫
再來是尋找輸入字串中每個字元在陣列中的哪個位置
之後把它位置的右邊的字元,指定給原本的字元
那字串裡的字元都會被替換成右移之後的字元
陣列中沒有空白所以在判斷的程式碼裡,要多加一個如果是空白的條件
最後印出
若想閱讀相關文章請關注我的粉絲團
小資菜鳥向前衝