c++第四个点过不去求看

P1914 小书童——凯撒密码

u55545554 @ 2018-07-20 15:49:56

/*蒟蒻虽然忘记密码,但他还记得密码是由一串字母组成。且密码是由一串字母每个向后移动n为形成。z的下一个字母是a,如此循环。
他现在找到了移动前的那串字母及n,请你求出密码。(均为小写)
输入格式:
第一行:n。第二行:未移动前的一串字母
输出格式:
一行,是此蒟蒻的密码*/
#include<iostream>
#include<cstring>
using namespace std;
int main(){
    char zimu[27],z='a';
    for(int i=1;i<=26;i++){
        zimu[i]=z;
        (int)z++;
    }
    string s;int n;//s:要移动的那串字母 n:移动的位数 
    cin>>n>>s;//输入 
    int l=s.length();//l存储字符串s的位数 
    char a[l+1];//定义a字符数组存储输入的字母 
    strncpy(a,s.c_str(),s.length()); //把字符串s拷贝到a字符数组里
    n=n%26;//防止超出26个字母 
    if(n!=0){
        for(int i=0;i<l;i++){//n=1 z=26------1+26=27 zimu[27-26]=a
            a[i]=((int)a[i])+n;//共有128个ASCII码//z的ASCII:122     122=122+1=123 
            if((int)a[i]>122){a[i]=zimu[((int)a[i]-96)-26];}//123=zimu[2] z>25
        }
    }
    for(int i=0;i<l;i++)cout<<a[i];
    return 0;
}

没有问题啊 z往后移动25位应该是y,我的程序没有问题,测试输入25和z却不输出


by u55545554 @ 2018-07-20 15:51:44

输入6 z一直到25 z都不输出了


by u55545554 @ 2018-07-20 16:23:17

已经过了谢谢大家 加个特判即可

if((int)a[i]+n>128){
    a[i]=zimu[n-(122-(int)a[i])];
    continue;
}

|