作者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/cn.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