Answerexploer @ 2024-03-11 19:44:09
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,i;
string str;
cin>>n>>str;
char a[str.size()];
for(i=0;i<str.size();i++)
{
a[i]=str[i]+n;
if(a[i]-'z'>0)
a[i]-=26;
}
for(i=0;i<str.size();i++)
cout<<a[i];
return 0;
}
by Answerexploer @ 2024-03-11 19:55:58
ASCII码最大是127,但是如果越界了再减26行吗,测试点的数据显示是一样的,但是用vscode跑是会出现中文乱码。
by wyxrl @ 2024-03-11 20:12:37
@Answerexploer 你为啥要多一个字符数组?用字符串操作应该会对
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
string str;
cin>>str;
for(int i=0;i<s.length();i++)
{
if(str[i]+n>'z')
cout<<char(n+str[i]-26);
else
cout<<char(str[i]+n);
}
return 0;
}
by Answerexploer @ 2024-03-12 09:50:37
@wyxrl 啊,我只用了字符串吧,用[]是为了访问字符串中的每一个元素。
by wyxrl @ 2024-03-12 20:29:41
@Answerexploer 那你的 char a[str.size()];
是啥。
by Answerexploer @ 2024-03-13 18:58:03
@wyxrl 但是对一个字符串怎么移位操作,都需要拆开成一个字符处理吧。所以这个字符数组应该不是主要矛盾吧。
by wyxrl @ 2024-03-13 19:29:40
@Answerexploer 本蒟蒻又找得到这个了,亲测60变80,要加特判(虽然我不知道为什么)
if(n==26)
{
cout<<str;
return 0;
}
by Answerexploer @ 2024-03-13 20:04:04
@wyxrl 这个就是测试点三,第三个测试点偏移量是26,你的特判正好通过了,避免了加n后的中文乱码,我感觉应该还是要提防越界吧,可能越界了char表示的数字就乱了?别想了,我早就用模26去了。
by xhl_leo @ 2024-04-03 16:40:25
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
string s;
cin>>s;
int l=s.size();
for(int i=0;i<l;i++){
int a=int(s[i])+n;
if(a>'z'){
cout<<char((a%'z')+'a'-1);
}else{
cout<<char(a);
}
}
return 0;
}
by xhl_leo @ 2024-04-03 16:42:11
求个关注