作者woody3724 (woody)
看板Programming
標題[問題] 程式碼大量重複卻不知如何解決
時間Wed Oct 18 14:16:13 2017
給一個字串,若遇到字母,則依照字母順序將它改成 k 個字母後的字母,且不改變大小寫
若超過 Z/z 則回頭從A/a算起 且 k 必定大於 0 且小於等於 9
附上26個字母讓大家方便查詢
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
例如字串為 x3W4jO/a 且 k = 6 則改成 d3C4pU/G
我的寫法:
https://i.imgur.com/XBIdN7s.jpg
但是第 3~7 行 與 9~13 行重複性太高了,根本只差在第5行的 'Z' 與第11行的 'z'
因此我改成
https://i.imgur.com/T4YPD3L.jpg
但明顯是錯的,原因在23~26行的註解
不知道各位有沒有漂亮的寫法呢? 謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 68.181.88.39
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Programming/M.1508307377.A.359.html
1F:推 eight0: 我覺得這不是很大量111.250.158.229 10/18 14:52
2F:→ Neisseria: 與其糾結在這幾行程式碼上還不如把 203.71.94.20 10/18 15:18
3F:→ Neisseria: 公開函式/方法設計一下比較實在 203.71.94.20 10/18 15:18
4F:→ MOONRAKER: 還以為多大量 218.161.46.90 10/18 15:53
5F:→ MOONRAKER: 等你上班會看到一個block重覆十幾次 218.161.46.90 10/18 15:54
6F:→ MOONRAKER: 每一個block可能一百行 那也沒多大 218.161.46.90 10/18 15:54
7F:→ MOONRAKER: 這麼簡單的事情上面搞最佳化就像小學生 218.161.46.90 10/18 16:04
8F:→ MOONRAKER: 比誰寫字比較快一樣 218.161.46.90 10/18 16:04
9F:→ kisaraki1976: 即使是小學生比寫字比快,也是可以 42.73.46.173 10/18 17:53
10F:→ kisaraki1976: 練到基本功的。給個提示,去看看ASC 42.73.46.173 10/18 17:53
11F:→ kisaraki1976: II表中字母的排列順序,你再思考一 42.73.46.173 10/18 17:53
12F:→ kisaraki1976: 下條件判斷式怎麼合併怎麼寫。 42.73.46.173 10/18 17:53
13F:推 yvb: 圖2列22前算個z, 列23就可改為 if(s[i] > z) 60.250.129.28 10/18 19:53
14F:→ MOONRAKER: 年紀太小做推理訓練不會有好的成果。 218.161.46.90 10/18 20:30
15F:→ MOONRAKER: 清楚比簡短重要 對新手如此 老手也如此 218.161.46.90 10/18 20:31
16F:→ bcew: 在23行加上用s[i]的值區分大小寫就能有正確 114.136.10.54 10/18 20:37
17F:→ iFEELing: 怎麼覺得好像在密碼學看過這東西... 125.224.130.90 10/19 00:08
18F:→ iFEELing: 凱撒密碼 ? 125.224.130.90 10/19 00:09
19F:→ adrianshum: 抽個function 就好了。像 char shiftC 49.130.131.203 10/19 08:57
20F:→ adrianshum: har(char c, int charsToShift, char 49.130.131.203 10/19 08:57
21F:→ adrianshum: lowerBound, char upperBound) 49.130.131.203 10/19 08:57
22F:→ adrianshum: 不在lower & upper bound 中間的就直 49.130.131.203 10/19 08:58
23F:→ adrianshum: 接回傳原字 49.130.131.203 10/19 08:58
24F:推 vi000246: 你可以去買本clean code 或重構的書 112.104.27.203 10/22 21:43
25F:推 Killercat: 別用-=, 有個運算元叫做"%" 60.250.140.192 10/24 13:45
26F:→ Killercat: 用%會精簡很多 60.250.140.192 10/24 13:45
27F:→ F04E: 推薦讀一下 如何撰寫0錯誤程式 這本書 153.234.17.66 12/12 07:20