題目: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])就是把大寫轉成小寫

再來是尋找輸入字串中每個字元在陣列中的哪個位置

之後把它位置的右邊的字元,指定給原本的字元

那字串裡的字元都會被替換成右移之後的字元

陣列中沒有空白所以在判斷的程式碼裡,要多加一個如果是空白的條件

最後印出

若想閱讀相關文章請關注我的粉絲團

小資菜鳥向前衝

https://www.facebook.com/%E5%B0%8F%E8%B3%87%E8%8F%9C%E9%B3%A5%E5%90%91%E5%89%8D%E8%A1%9D-204484273323335/?fref=ts

文章標籤
創作者介紹

cychss6305的部落格

cychss6305 發表在 痞客邦 PIXNET 留言(0) 人氣()