问题遇到的现象和发生背景
给定一串字符,把其中每个大写字母变换成按顺序向后移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;
}