gpt4 book ai didi

c - C 语言 Vigenere 密码的移位问题

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

我对编程非常陌生,并且在 edX 类(class) CS50 中使用 C 语言 Vigenere 时遇到了一些困难。我已将问题分解为大写字母和小写字母,现在我只想解决大写字母问题。我使用单词“panda”作为 key ,使用“ILIKEYOU”作为明文。当我运行该程序时,第一个字母对应于我期望的字母 (23=X)。之后,程序似乎只是为剩下的 7 个字母吐出随机数。我还没有转换回 ASCII,因为我的代码有很多问题。有什么想法吗?非常感谢大家的帮助:)

#include <cs50.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

int main(int argc, string argv[])
{
// Print error message if the user imput is executed without any
command-line arguments or with more than one command-line argument
if (argc != 2)
{
printf("Usage: ./vigenere k\n");
return 1;
}

// Access key
string key = argv[1];

// Convert the array from a string to an int
int letter;
letter = atoi(argv[1]);

// Print error message if the user imput is one command-line argument
and contains *any* non-alphabetical character(s)
for (int c = 0; c < strlen(key); c++)
{
if (!isalpha (key[c]))
{
printf("Usage: ./vigenere k\n");
return 1;
}
}

// Prompt the user for a string of plaintext
string p;
p = get_string("plaintext:");

//Print ciphertext
printf("ciphertext: ");

// Accessing each character in the plaintext
for (int i = 0, n = strlen(p); i < n; i++)
{
// Shift letters only in the plaintext
if (isalpha(p[i]))
{

// Convert plaintext and key to ASCII capital letters to
alphabetical index
// Encipher capital letters in plaintext and print
int c = 0;
if (isupper(p[i]))
{
printf("%i\n", ((p[i] - 65) + (toupper(key[c]) - 65)) % 26);
}
}
}

最佳答案

需要少量修改 -

int index_key = 0;
int shift= 0;
int key_len = strlen(key);
for (int i = 0, n = strlen(p); i < n; i++)
{
// Shift letters only in the plaintext
if (isalpha(p[i]))
{
// Convert plaintext and key to ASCII capital letters to
//alphabetical index
// Encipher capital letters in plaintext and print
if (isupper(p[i]))
{
shift = ((p[i] - 'A') + (toupper(key[index_key % key_len]) - 'A')) % 26;
index_key++;
printf("%c", p[i] + shift);
}
}
}

关于c - C 语言 Vigenere 密码的移位问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54452295/

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