gpt4 book ai didi

CS50 Pset2。维杰内尔。上文本到下键,反之亦然问题

转载 作者:太空宇宙 更新时间:2023-11-04 03:31:09 25 4
gpt4 key购买 nike

好的。所以,我需要制作一个 Vigenere 密码。当文本和键都是大写或小写时,代码编译正常。但是当文本和 key 与大小写不同时,代码就不起作用了。然后它不打印任何东西。例如当 key 是:aaAA。文本是 aBcD。结果是:aD。有人可以给我提示吗? :)

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

int main (int argc, string argv[])
{
string key = argv [1]; //argv [1] is the key. 0 is compile program
{
if (argc != 2)
{
printf ("Please give one key: "); //if there are more or less then 2 argc, then have to try again
}

for (int j = 0, n = strlen (key); j < n; j++)
if (!isalpha (key [j]))
{
printf ("Please give a key in alphabetic characters: ");
//key must be alphabetic. For loop to check every character of the key.
return 1;
}
}

string text = GetString(); //Get secret message from user

int j = 0;
for (int i = 0, n = strlen (text); i < n; i++)
{
if (isupper (text [i]))
{
if (isupper (key [j]))
{
/*Minus 65 to make count till 26 from text and key. Use modulo to wrap around key. And modulo to wrap around alphabet.
Plus 65 to go to correct ASCII character. */
int u = ((((text [i] - 65) + (key [j % strlen (key)] - 65)) % 26) + 65);
printf ("%c", u);
}
}
else if (islower (text [i]))
{
if (islower (key[j]))
{
int l = ((((text [i] - 97) + (key [j % strlen (key)] - 97)) % 26) + 97);
printf ("%c", l);
}
}
else if (islower (text [i]))
{
if (isupper (key[j]))
{
int lu = ((((text [i] - 97) + (key [j % strlen (key)] - 65)) % 26) + 97);
printf ("%c", lu);
}
}
else if (isupper (text [i]))
{
if (islower (key[j]))
{
int ul = ((((text [i] - 65 + (key [j % strlen (key)] - 97)) % 26) + 65);
printf ("%c", ul);
}
}
else
{
// When character is non alphabetic print it in its original form.
printf ("%c", text [i]);
}
j++;
}
{
printf ("\n");
return 0;
}
}

最佳答案

问题出在您的 if、else-if、else-if... 语句中。原因是 if isupper(text[i]) 返回 true,而 if isupper(key[j]) 返回 false 它永远不会评估 else if 语句。你应该这样做

if( isupper(text[i])){
if(isupper(key[j])){ // Both upper
//do stuff
}
else if(islower(key[j])){ //Here key is lower and text is upper
//do stuff
}
}
else if (islower(text[i])){
if (islower(key[j])){ //Both lower
//do stuff
}
else if(isupper(key[j])){ //Key upper and text lower
//do stuff
}
}
else{//It's not alpha
//do stuff
}

/***************NEW********************/
j = j%strlen(key); //I suggest using this at the end of the loop to avoid key[j] to go out of it's bounds
// j = (j==strlen(key)) ? 0 : j; //Another alternative

另外,如果字符不是字母,我认为你不应该增加 j

关于CS50 Pset2。维杰内尔。上文本到下键,反之亦然问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36476107/

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