麻烦看下什么地方错了

P1914 小书童——凯撒密码

Alien_99 @ 2016-08-24 19:13:23

#include<stdio.h>
#include<cstring>
#include<cmath>
#include<iostream>
#include<string.h>
#include <cstdlib>
using namespace std;
int main(){
char zx[27];
int n;
zx[0]='a';
zx[1]='b';
zx[2]='c';
zx[3]='d';
zx[4]='e';
zx[5]='f';
zx[6]='g';
zx[7]='h';
zx[8]='i';
zx[9]='j';
zx[10]='k';
zx[11]='l';
zx[12]='m';
zx[13]='n';
zx[14]='o';
zx[15]='p';
zx[16]='q';
zx[17]='r';
zx[18]='s';
zx[19]='t';
zx[20]='u';
zx[21]='v';
zx[22]='w';
zx[23]='x';
zx[24]='y';
zx[25]='z';
cin>>n;
char a;
for(int i=1;scanf("%c",&a)!=EOF;i++){
    for(int j=0;j<=25;j++)
    {
        if(a==zx[j])
        {
            cout<<zx[j+n];
            break;
        }
    }
}
return 0 ;
}

by 仇哥 @ 2016-09-28 23:23:40

如果n大于26就可能调用数组范围外的数据,造成错误

可以把cout<<zx[j+n]改成cout<<zx[(j+n)%26]

还有,可以看看我的代码

#include <stdio.h>
int main()
{
    char in[100]; 
    int n, j; 
    scanf("%d%s", &n, in); 
    for(j = 0; in[j] != '\0'; j++)
        putchar((in[j]-'a'+n)%26+'a'); 
}

|