gpt4 book ai didi

c - C 中 ascii 字符串的奇怪行为

转载 作者:太空宇宙 更新时间:2023-11-04 07:20:58 24 4
gpt4 key购买 nike

我正在帮助一个 friend 用 C 语言为一个介绍类编写一段代码,该类将接受一个字符串并将该字符串的所有字符移动一定数量的字符。因此,如果他使用数字 2 运行程序,那么它会将所有字符移动 2 个位置 (hello -> jgnnq)。

我们现在只是尝试测试小写数字,没有负面情况或类似情况。出于某种原因,这段代码不起作用。我们刚刚用字母 o (ascii #111) 和数字 18 来测试 k。在评论中是我们的问题。我确定这只是一些奇怪的 c 行为,但我们无法找出问题所在。

#include <string.h>
.
.
.
int k = atoi(argv[1]);
printf("Thanks for the %s. What sentence do you want to encrypt?\n", argv[1]);
string s = GetString();

for (int i = 0, n = strlen(s); i < n; i++) {
if (s[i] >= 'a' && s[i] <= 'z') {
// printing s[i] gives 111 for 'o'
// printing k gives 18
// printing s[i]+k gives 129 which is expected.
s[i] = s[i] +k;
// printing s[i] here should give 129 but it gives -127
while (s[i] > 'z') {
s[i] = s[i] -26;
}
}
}

谢谢!

最佳答案

替代的“接受后”答案不需要更改 s 的类型。

int 做数学运算。

if (s[i] >= 'a' && s[i] <= 'z') {
int sum = s[i] + k;
if (sum > 'z') {
sum = sum - 26;
}
s[i] = sum
}

s 更改为类型 unsigned char 失败应该 'z' + key > 255

如果 'z' + key > INT_MAX

这个答案失败了

关于c - C 中 ascii 字符串的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21663795/

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