gpt4 book ai didi

c - 程序无法使用空格正确加密

转载 作者:行者123 更新时间:2023-11-30 15:14:53 24 4
gpt4 key购买 nike

我尝试创建维吉尼亚密码的实现,但遇到了一个障碍,即当输入中给定空格时程序无法正常工作。 (假设关键字培根)带空格

输入

Meet me

正确输出

Negh zf

实际输出

Negh Ne

没有空格

输入

Meetme

输出

Neghzf

很明显,该程序适用于没有空格的字符串。这里的任何地方都有代码,并提前感谢您的帮助。

#include <string.h>
#include <stdio.h>
#include <ctype.h>
char encrypt(int key, char a);
int hash(char a);
int main(int argc, string argv[])
{
if (argc != 2)
{
printf("You need a keyword!");
return 1;
}

string keyword = argv[1];

for (int j = 0; j != strlen(keyword); ++j)
{
if (!isalpha(keyword[j]))
{
printf ("The keyword needs to be all words!");
return 1;
}
}

string text = GetString();

for (int i = 0, j = 0; i != strlen(text); ++i, ++j)
{
if (j == strlen(keyword))
{
j = 0;
}

int key = 0;

if (isupper(keyword[j]))
{
key = keyword[j] - 'A';
text[i] = encrypt(key, text[i]);
}
else if (islower(keyword[j]))
{
key = keyword[j] - 'a';
text[i] = encrypt(key, text[i]);
}
else if (isspace(text[i]))
{
j = j - 1;
}

}

printf ("%s\n", text);
}
char encrypt(int key, char a)
{
if (isalpha(a))
{
int total = (int) a + key;
if (isupper(a))
{
while (total > 90)
{
total = total - 26;
}
}
else if (islower(a))
{
while (total > 122)
{
total = total - 26;
}
}

return (char) total;
}
else
{
return a;
}
}

最佳答案

问题出在你的 for 循环内部。尝试用以下方式纠正它(你会很容易理解错误):

for (int i = 0, j = 0; i != strlen(text); ++i, ++j)
{
if (j == strlen(keyword))
{
j = 0;
}
// the following check mmust be done here
if (isspace(text[i])) {
j = j - 1;
}
int key = 0;
if (isupper(keyword[j]))
{
key = keyword[j] - 'A';
text[i] = encrypt(key, text[i]);
}
else if (islower(keyword[j]))
{
key = keyword[j] - 'a';
text[i] = encrypt(key, text[i]);
}
}

关于c - 程序无法使用空格正确加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33848431/

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