CS50-pset2-替换
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CS50-pset2-替换相关的知识,希望对你有一定的参考价值。
我看不到我的pset2替换代码丢失了。当我使用check50测试程序时,它将返回以下结果:
:) replacement.c存在
:) replacement.c编译
:(使用ZYXWVUTSRQPONMLKJIHGFEDCBA作为密钥将“ A”加密为“ Z”预期的“密文:Z ...”,而不是“密文:Z ...”
:(使用ZYXWVUTSRQPONMLKJIHGFEDCBA作为密钥将“ a”加密为“ z”预期的“密文:z ...”,而不是“密文:z ...”
:(使用NJQSUYBRXMOPFTHZVAWCGILKED作为密钥,将“ ABC”加密为“ NJQ”预期的“密文:NJ ...”,而不是“密文:NJ ...”]
:(使用NJQSUYBRXMOPFTHZVAWCGILKED作为密钥将“ XyZ”加密为“ KeD”预期的“密文:Ke ...”,而不是“密文:Ke ...”]
:(使用YUKFRNLBAVMWZTEOGXHCIPJSQD作为密钥,将“ This is CS50”加密为“ Cbah ah KH50”预期的“密文:Cb ...”,而不是“密文:Cb ...”
:(使用yukfrnlbavmwzteogxhcipjsqd作为密钥将“ This is CS50”加密为“ Cbah ah KH50”预期的“密文:Cb ...”,而不是“密文:Cb ...”
:(使用YUKFRNLBAVMWZteogxhcipjsqd作为密钥将“ This is CS50”加密为“ Cbah ah KH50”预期的“密文:Cb ...”,而不是“密文:Cb ...”
:(使用DWUSXNPQKEGCZFJBTLYROHIAVM作为密钥加密所有字母字符预期的“密文:Rq ...”,而不是“密文:Rq ...”]
:)处理缺少密钥的问题>
:)处理无效的密钥长度
:)处理密钥中的无效字符
:)处理密钥中的重复字符
:)处理密钥中的多个重复字符
但是,当我手动键入键和纯文本时,它的工作原理与预期的完全一样。此外,check50的“预期”结果似乎与输出完全相同,因此错误之处并不明显。
我的代码如下:
#include <cs50.h> #include <stdio.h> #include <string.h> #include <ctype.h> int get_validkey(string A); int main(int argc, string argv[]) { if (argc != 2) { printf("useage: ./substitution key "); return 1; } int validation = get_validkey(argv[1]); if (validation == 1) { printf("key must contain 26 alphabetical characters "); return 1; } // prompting user for plaintext string plaintext = get_string("plaintext: "); printf("ciphertext: "); int length = strlen(plaintext); for (int c = 0; c <= length ; c++) { // printing any non-alphabet characters unchanged if (plaintext[c] < 'A' || (plaintext[c] > 'Z' && plaintext[c] < 'a') || plaintext[c] > 'z') { printf("%c", plaintext[c]); } else { for (int b = 0; b <= 25; b++) { if (plaintext[c] == 65 + b) { char upper = argv[1][b]; int up = isupper(upper); if (up == 0) { upper = toupper(upper); printf("%c", upper); } if (up != 0) { printf("%c", upper); } } else if (plaintext[c] == 97 + b) { char lower = argv[1][b]; int low = islower(lower); if (low == 0) { lower = tolower(lower); printf("%c", lower); } if (low != 0) { printf("%c", lower); } } } } } printf(" "); return 0; } // function assesses if the key input is valid and returns 0 if it is and 1 if it is not int get_validkey(string A) { int inputlength = strlen(A); if (inputlength != 26) { return 1; } else { for (int g = 0; g < 26; g++) { // checks if the character is non alphabetical if (A[g] < 'A' || (A[g] > 'Z' && A[g] < 'a') || A[g] > 'z') { return 1; } // scans all characters before A[g] to see if it has already been used for (int k = (g - 1); k >= 0; k--) { if (A[k] == A[g]) { return 1; } // also checks if different case of the same character has been used if (A[k] == A[g] + 32) { return 1; } if (A[k] == A[g] - 32) { return 1; } } // scans all characters after A[g] to check if it has been used already. (Not sure if this is necessary) for (int l = (g + 1); l < 26; l++) { if (A[l] == A[g]) { return 1; } // also checks if a different case of the same letter is used if (A[l] == A[g] + 32) { return 1; } if (A[l] == A[g] - 32) { return 1; } } } return 0; } }
我对编程非常陌生,任何帮助将不胜感激。
我看不到我的pset2替换代码丢失了。当我使用check50测试程序时,它返回以下结果::) replacement.c存在:) replacement.c编译:(将“ A”加密为“ Z” ...
[不必担心这是来自check50的错误,我在解决问题时遇到了同样的问题;我的意思是,即使错误也表明该代码是正确的
以上是关于CS50-pset2-替换的主要内容,如果未能解决你的问题,请参考以下文章