小白菜*** 2021-12-29 21:12 采纳率: 100%
浏览 32
已结题

凯撒密文,无法运行。

问题遇到的现象和发生背景

给定一串字符,把其中每个大写字母变换成按顺序向后移N位的字母,遇到26个字母结束要环回到字母A计算顺序,其他字符不变。

问题相关代码,请勿粘贴截图
运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果

【样例输入】

3
ABC123&*XYZ
【样例输出】

DEF123&*ABC

/*
凯撒密文
  本题测试点总结:
  ①输入的n值,需要对26取模,因为n的值有可能在26的绝对值之外;
  ②n值为负数或正数时,需要判断一下,如果小于0,则加上26,如果大于零,不要加上额外的26;
*/
#include<iostream>
#include<string.h>
using namespace std;
int main()
{
    int n,i;

    char ch1[100]={0};

cin>>n;
gets(ch1);


    n = n%26;
    int len1 = strlen(ch1);
    for(i=0;i<len1;i++)
    {
        if(ch1[i]>='a'&&ch1[i]<='z')
        {
              if(n>=0) ch1[i] = ((ch1[i]-'a') + n)%26+'a';
            else if(n<0) ch1[i] = ((ch1[i]-'a') + n+26)%26+'a';
        }
        else if(ch1[i]>='A'&&ch1[i]<='Z')
        {
            if(n>=0) ch1[i] = ((ch1[i]-'A') + n)%26+'A';
            else if(n<0) ch1[i] = ((ch1[i]-'A') + n+26)%26+'A';
        }
    }
    ch1[i] = '\0';
    printf("%s",ch1);
    return 0;
}


  • 写回答

2条回答 默认 最新

  • _GX_ 2021-12-29 21:36
    关注
    /*
    凯撒密文
      本题测试点总结:
      ①输入的n值,需要对26取模,因为n的值有可能在26的绝对值之外;
      ②n值为负数或正数时,需要判断一下,如果小于0,则加上26,如果大于零,不要加上额外的26;
    */
    #include <stdio.h>
    
    #define N 100
    
    int main()
    {
        int n;
        char a[N];
        scanf("%d", &n);
        n %= 26;
        if (n < 0)
            n += 26;
        scanf("%s", a);
        char *p = a;
        while (*p)
        {
            if (*p >= 'A' && *p <= 'Z')
                *p = 'A' + (*p - 'A' + n) % 26;
            p++;
        }
        printf("%s", a);
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 1月6日
  • 已采纳回答 12月29日
  • 创建了问题 12月29日

悬赏问题

  • ¥15 对于这个问题的代码运行
  • ¥50 三种调度算法报错 有实例
  • ¥15 关于#python#的问题,请各位专家解答!
  • ¥200 询问:python实现大地主题正反算的程序设计,有偿
  • ¥15 smptlib使用465端口发送邮件失败
  • ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败