小白菜*** 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 (SQL语句|查询结果翻了4倍)
  • ¥15 Odoo17操作下面代码的模块时出现没有'读取'来访问
  • ¥50 .net core 并发调用接口问题
  • ¥15 网上各种方法试过了,pip还是无法使用
  • ¥15 用verilog实现tanh函数和softplus函数
  • ¥15 Hadoop集群部署启动Hadoop时碰到问题
  • ¥15 求京东批量付款能替代天诚
  • ¥15 slaris 系统断电后,重新开机后一直自动重启
  • ¥15 QTableWidget重绘程序崩溃
  • ¥15 谁能帮我看看这拒稿理由啥意思啊阿啊