R - 小鑫の日常系列故事(七)——小纸条

Description

小鑫在高中的时候喜欢上了一个十分漂亮的女孩。那个女孩也很喜欢他,就答应成为他的女朋友。

但是大家都知道高中的生活是忙碌的,除了上课就是上课,有时候可能连课间时间都被老师占用。于是小鑫想出了在上课给女朋友传纸条的方法来表达自己的爱慕。

又但是她与小鑫之间的距离太远,中间必须通过同学来传递纸条。可他们并不想让同学们知道写的什么就想到加密纸条这种方法。方法如下:

他们每天都会约定加密常数n,举个例子,当n=1时,今天写的每一句话中所用的字母都会向后+1,比如:i love you就成了j mpwf zpv ,当然了当是z的时候,+1就等于a。

请你帮他女朋友解密他写的纸条么?

Input

输入为多组,每组为两行。

第一行为n,-50<n<50

第二行为一句话,只有小写字母和空格。长度小于10000

Output

 输出解密之后的内容

Sample

Input 

1
j mpwf zpv

Output 

i love you

Hint

#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
#include <stdio.h>
#include <vector>
using namespace std;
/*
1.定义字符数组str[10001],偏移量n(n可以控制加密解密,n为解密,n取反为加密);
2.多组输入n,cin.geline()输入str,并且要吃掉回车,再根据偏移量n求余量为m
3.1遍历字符串,对于所有的字母(if语句),分三种情况处理,当偏移后仍在'a'~'z',直接修改
3.2当偏移后超过'z‘的,处理为 str[i]+m-'z'+'a'-1 | (str[i]+m-'z'是当前字符和'z'的间隔,-1是因为z到a也存在一个间隔)
3.3当偏移量低于'a’的,处理为 'z'-'a'+str[i]+m+1 | 也是因为间隔所以少减1
4.输出新串
*/

int n,m;
char str[10001];
int main()
{
    while(cin>>n)
    {
        n=-n;
        getchar();
        cin.getline(str,10001);
        m=n%26;
        for(int i=0; str[i]!='\0'; i++)
        {
            if(str[i]>='a'&&str[i]<='z')
            {
                if(str[i]+m>='a'&&str[i]+m<='z')
                {
                    str[i]=str[i]+m;
                }
                else if(str[i]+m>'z')
                {
                    str[i]=str[i]-'z'+'a'+m-1;
                }
                else
                {
                    str[i]='z'-('a'-str[i]-m)+1;
                }
            }
        }
        printf("%s\n",str);
    }
    return 0;
}

Guess you like

Origin blog.csdn.net/m0_52226803/article/details/121048822