【发布时间】:2016-08-18 23:28:04
【问题描述】:
我正在尝试同时生成一个包含大小写字母的数组。
我确实理解生成两个不同大小写字母的逻辑。
rand() % 26 + 65 // generate all the uppercase letter
同时
rand() % 26 + 97 // generate all the lowercase letter
我尝试在谷歌上搜索如何同时生成它们,这就是我得到的。
rand() % 26 + 65 + rand() % 2 * 32 // generate both upper and lowercase letter
不幸的是,他们没有准确解释其背后的逻辑,我不想盲目地将其复制并粘贴到我的作业中。将第二个rand() 添加到第一个rand() 时,一直在寻找rand() % 2 * 32 背后的逻辑。
我们将不胜感激。
【问题讨论】:
-
这只是 ASCII 编码的无聊细节。你可以盯着它看一会儿,直到它有意义为止。
-
首先,您应该避免使用幻数。例如,第一个 sn-p 最好写成
rand() % ('Z' - 'A' + 1) + 'A'。 -
首先,请尽量避免magic numbers。如果你指的是字符 A,那么就这么说(如
'A')。其次,阅读ASCII table 可能会有所帮助。还应注意,您生成字符(上、下或混合)的方法仅适用于使用ASCII 的系统。其他编码仍然存在,尽管它们很少见。 -
@OliverCharlesworth:在这种情况下,我会说这是错误的建议。该代码密切依赖于 ASCII 编码。这里没有一般性。我认为很难想出一个包含字母
A和Z的编码,但不是其中的 26 个,而是连续序列。 -
还要注意,不管你是否理解,如果你把它复制到你的作业中,你需要注明出处。