gpt4 book ai didi

c - 我正在尝试对字符 z (ASCII 122) 执行凯撒移位。如何给它 "more room"以防止它溢出超过 127?

转载 作者:行者123 更新时间:2023-12-03 03:39:13 25 4
gpt4 key购买 nike

在 CS50 2019 Caesar 作业中,我应该按给定数量的字母(key)对字符执行 Caesar 移位。

为此,我将 key 的值添加到每个字母,如下所示:

for each character in plaintext:
plaintext[character] += key

因为我希望 z 循环回 a,所以我写道:

while (ciphered_character > 122)
{
ciphered_character -= 26;
}

使用 zplaintext26key 运行程序会导致 26 添加到 z(由 122 表示)。这会导致 plaintext[character] 溢出(我猜是超过 127),并在 while 循环启动之前变成负数。这会产生垃圾输出。

我知道我可以事先检查潜在的溢出并先减去26,但这使我的代码变得复杂。我可以给变量“更多空间”以防止其溢出吗?

我是否使用不同的数据类型?这里的最佳实践是什么?

最佳答案

如果您只关心小写字母,那么这对您有用:

for each character in plaintext:
plaintext[character] = (plaintext[character] - 'a' + key) % 26 + 'a'

减去“a”即可得到 0-25 之间的值,然后添加 key 。如果存在溢出,模数将为您提供 0-25 范围内的更新值,该值被添加回“a”以获得正确的字符。

如果您确实需要处理大小写,那么您将需要两种不同的情况 - 一种使用“a”,另一种使用“A”。通过检查 isupper(plaintext[character]) 为每个字符选择正确的大小写

关于c - 我正在尝试对字符 z (ASCII 122) 执行凯撒移位。如何给它 "more room"以防止它溢出超过 127?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57730253/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com