【问题标题】:Caesar Cipher is not working with spaces凯撒密码不适用于空格
【发布时间】:2014-11-01 01:58:24
【问题描述】:

我很难让空间正确显示。以下是打印内容的输出:

./CaeserC 13[A 用 13[A 个空格加密消息 请插入您的留言: 你好世界 您的信息是:Hello World 你的加密信息是:Uryybadbeyq

应该是Uryyb Jbeyq

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

int main (int argc, string argv[])
{
    string kinp = argv[1];
    int k = atoi(argv[1]);
    printf("Encrypt message by %s spaces\n", kinp);
    printf("Please insert your message:\n");
    string p = GetString();
    int lettern;
    printf("Your message is: %s\n", p);
    printf("Your encrypted message is:");
    for (int i=0, n=strlen(p); i<n; i++)
        {  
            lettern=p[i];
            //printf("%i \n", lettern);
        }
    if (lettern==32)
    {
        printf("%c", ' ');
    }
    if (lettern>= 65 && lettern<=90)
    {
    for (int i=0, n=strlen(p); i<n; i++)
        {  
            printf("%c", ((p[i]+k-65)%26)+65);
        }
    }
    if (lettern>= 97 && lettern<=122)
    {
        for (int i=0, n=strlen(p); i<n; i++)
        {
            printf("%c", ((p[i]+k-97)%26)+97);
        }
    }

    printf("\n");
}

【问题讨论】:

  • 注意:当然(lettern&gt;= 'A' &amp;&amp; lettern&lt;='Z')(lettern&gt;= 65 &amp;&amp; lettern&lt;=90) 更容易理解。考虑使用像 'A'' ' 这样的文字。
  • 删除内部for (int i=0, n=strlen(p); i&lt;n; i++) x2。格式化代码可能有助于了解原因。
  • 循环for (int i=0, n=strlen(p); i&lt;n; i++) { lettern=p[i]; /*printf("%i \n", lettern);*/ } 最好替换为lettern = p[strlen(p)-1];。你真的是想让更多的代码成为循环体的一部分吗?

标签: c encryption cs50 caesar-cipher


【解决方案1】:
printf("Your encrypted message is:");
for (int i=0; p[i]; i++){
    if(isupper(p[i]))
        putchar((p[i]+k-'A')%26 +'A');
    else if(islower(p[i]))
        putchar((p[i]+k-'a')%26 +'a');
    else
        putchar(p[i]);
}

【讨论】:

    【解决方案2】:

    只需添加一个简单的 if 循环来检测字符是否为空格(“”),就好像我假设这是为了您的受控评估是正确的,他们不希望空格移动。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-07
      • 2020-05-31
      • 2014-02-06
      • 1970-01-01
      • 1970-01-01
      • 2013-02-26
      相关资源
      最近更新 更多