【发布时间】:2017-09-09 15:20:48
【问题描述】:
我一直在尝试解决 cs50 的凯撒问题的不太舒服的版本,并且只想通过说我是一个完整的初学者来作为这个问题的开头。
该程序应该要求用户输入密钥和明文,然后使用提供的密钥加密该文本。例如,对于 2 的键,“aba”将是“cdc”。
我想我设法让程序正确运行,除了两件事:密文或加密文本的输出应该是“密文:”的形式,而不是像我的程序那样只输出字符串。另一个更重要的问题是,如果输入的密钥大于 26,则输出包括其他不需要的符号而不仅仅是字母。
#include <stdio.h>
#include <cs50.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
int main (int argc, string argv [])
{
if (argc != 2)
{
printf ("Error. Instructions not followed.\n");
return 1;
}
int key = atoi(argv [1]);
printf ("%i\n", key);
printf("Plaintext:");
string plaintext = get_string();
int i = 0;
for (char c = 'A'; c <= 'Z'; c++)
{
i++;
}
for (int j = 0; j < strlen(plaintext); j++)
{
char ciphertext = ((plaintext[j]+key%26));
if (isupper (plaintext[j]) || islower (plaintext[j]))
{
printf("%c", ciphertext);
}
if (isalpha (plaintext [j]) == false)
{
printf("%c", (plaintext[j]));
}
}
printf("\n");
}
任何帮助将不胜感激。谢谢你。
【问题讨论】:
-
C 没有字符串类型。什么是“字符串”?
-
@MartinJames:
typedef char *string;。那是一些 CS50 垃圾混淆。还有一个不使用这门课程的理由。 -
当问题标记为 CS50 (cs50) 时,
string是char *的类型定义。请习惯它——做 CS50 的人不知道有什么不同,因为他们没有被教过任何不同的东西。当它没有被标记为 CS50 时,您可以添加标记或对其使用进行尖锐的嘲讽。 -
@Olaf:CS50 是我对 C 的第一次介绍,所以恐怕我还不知道它允许我们做什么,不允许我们做什么。希望将来我能够弄清楚最佳实践是什么。谢谢。
-
另一个获得帮助的地方是cs50.stackexchange.com,这是一个专门为 CS50 学生提供的 SE 网站。
标签: c cs50 caesar-cipher