作者cutekid (可愛小孩子)
看板Programming
標題Re: [問題] 程式碼大量重複卻不知如何解決
時間Thu Oct 19 00:16:05 2017
完整 code:
http://codepad.org/ySeXRSbF
關鍵部份:
if( (s[i] >= 'A' and s[i] <= 'Z') || (s[i] >= 'a' and s[i] <= 'z') ){
char ch = (s[i] <= 'Z') ? 'A' : 'a';
s[i] = (s[i] + k - ch) % 26 + ch;
}
※ 引述《woody3724 (woody)》之銘言:
: 給一個字串,若遇到字母,則依照字母順序將它改成 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), 來自: 61.223.48.185
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Programming/M.1508343369.A.7FA.html
1F:推 dannypsnl: 你的解法有錯誤 218.164.41.221 10/19 02:32
2F:→ dannypsnl: 你的解法 218.164.41.221 10/19 02:32
4F:→ dannypsnl: 測試方式 218.164.41.221 10/19 02:32
6F:→ dannypsnl: 測試結果 218.164.41.221 10/19 02:32
8F:推 idiont: 我覺得錯的是你自己寫的function耶 111.82.191.166 10/19 07:10
9F:→ idiont: 怎麼會輸出"\x80" 111.82.191.166 10/19 07:10
10F:→ dannypsnl: 那是gtest輸出的結果 218.164.41.221 10/19 08:00
11F:→ dannypsnl: 我一開始用if也是有測到不會過 218.164.41.221 10/19 08:00
12F:→ idiont: 所以你覺得輸出"f3E4r0/i"是錯的結果嗎 111.82.191.166 10/19 08:04
13F:推 idiont: 'x'的十六進位值是78 加上8變成80 會overf 111.82.191.166 10/19 08:16
14F:→ idiont: low 應該是你沒有判斷到吧 輸出'f'應該才 111.82.191.166 10/19 08:16
15F:→ idiont: 是正確的結果 111.82.191.166 10/19 08:16
16F:→ dannypsnl: 我左邊用原原po的程式 114.27.4.241 10/19 08:33
17F:→ dannypsnl: 我等等查qq 114.27.4.241 10/19 08:33
18F:→ idiont: 原原po的程式判斷有沒有大於'z' 可是這時s 111.82.191.166 10/19 08:37
19F:→ idiont: [i]的值因為overflow變成負的 所以if不成 111.82.191.166 10/19 08:37
20F:→ idiont: 立 結果就錯了 111.82.191.166 10/19 08:37
21F:→ dannypsnl: 第一支嗎? 114.27.4.241 10/19 08:40
22F:→ dannypsnl: 看來是原原po的函式在k=8, 9的時候都會 114.27.4.241 10/19 08:46
23F:→ dannypsnl: 溢位,我的錯 114.27.4.241 10/19 08:46
24F:→ dannypsnl: c大程式才是對的 114.27.4.241 10/19 08:46
26F:→ dannypsnl: 完整程式 114.27.4.241 10/19 08:52