古月小哥哥 @ 2019-06-15 17:07:41
#include<iostream>
#include<string>
using namespace std;
char change(string a,int i);
int main()
{
string a;
int n,len,i;
cin>>n>>a;
len=a.length();
for(i=0;i<len;i++)
{
a[i]=a[i]+n;
for(;a[i]>'z';)
a[i]=a[i]-26;
}
cout<<a;
return 0;
}
by 吾皇 @ 2019-06-15 17:20:47
#include<bits/stdc++.h>
using namespace std;
char change(char n,int x){
if(n+x>'z') return n+x-26;
else return n+x;
}
int main(){
string a;
int n,len,i;
cin>>n>>a;
len=a.length();
for(i=0;i<len;i++) cout<<change(a[i],n);
return 0;
}
by KGB1331 @ 2019-06-15 17:22:29
ASCII最大值只有127,a[i]+n如果大于127就会报错,之后减也没用。 先判断是不是加上后会超过z就可以解决问题。
by 吾皇 @ 2019-06-15 17:23:33
按照你的做法的话建议先判断a[i]+n是否大于‘z’,再考虑怎么加
代码:
#include<iostream>
#include<string>
using namespace std;
char change(string a,int i);
int main()
{
string a;
int n,len,i;
cin>>n>>a;
len=a.length();
for(i=0;i<len;i++)
{
if(a[i]+n>'z') a[i]=a[i]+n-26;
else a[i]=a[i]+n;
}
cout<<a;
return 0;
}
by KGB1331 @ 2019-06-15 17:24:59
#include<iostream>
#include<cstring>
using namespace std;
char s[9990091]; //char数组会舒服点
int main()
{
int n;
scanf("%d%s",&n,&s);
for(int i=0;i<strlen(s);i++)
{
if(s[i]+n>122)s[i]=s[i]+n-26; //先判断是不是加炸了
else s[i]+=n;
}
printf("%s",s);
return 0;
}
by KGB1331 @ 2019-06-15 17:27:47
@古月小哥哥
by 古月小哥哥 @ 2019-06-15 17:38:05
@吾皇 要是一次判断之后a[]的值还是大于‘z'