Wyttie @ 2023-08-09 11:07:22
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
string s;
cin>>n>>s;
for(int i=0;i<s.length();i++){
s[i]+=n;
if(s[i]>'z'){
s[i]-=26;
}
}
cout<<s;
return 0;
}
by XZX528 @ 2023-08-09 11:16:04
不要用string,否则可能会出现中文乱码。
提供一组测试数据:
输入:
26
qwertyuiopasdfghjklzxcvbnm
输出:
qwertyuiopasdfghjklzxcvbnm
by XZX528 @ 2023-08-09 11:18:50
用char类型的数组就可以了@Wyttie
by Wyttie @ 2023-08-09 11:21:19
@XZX528 谢谢,已关
by jackcm @ 2023-08-09 11:25:13
你移位操作时没有考虑到超过字母表末尾的情况。 当n的值等于26时, 将每个字符的ASCII值增加26后, 会超出小写字母的范围。
by jackcm @ 2023-08-09 11:26:14
@XZX528 好像也不错
by Wyttie @ 2023-08-09 11:41:53
@XZX528 qwq我改了却还是过不了
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
string s;
char a[51];
cin>>n>>s;
for(int i=0;i<s.length();i++){
a[i]=(char)s[i];
a[i]=(char)a[i]+n;
if(a[i]>'z'){
a[i]=(char)a[i]-26;
}
}
for(int i=0;i<s.length();i++){
cout<<(char)a[i];
}
return 0;
}
by XZX528 @ 2023-08-09 11:59:26
@Wyttie
#include<iostream>
using namespace std;
char s[55];
int main(){
int n;
cin>>n>>s;
for(int i=0;s[i]!='\0';i++){
s[i]=(s[i]-'a'+n)%26+'a';
}
for(int i=0;s[i]!='\0';i++){
cout<<s[i];
}
return 0;
}
by XZX528 @ 2023-08-09 12:02:31
从一开始就不要用string了呗,五十以内的字符数,直接用char数组就可以了┐( ̄ヘ ̄)┌
by Wyttie @ 2023-08-10 09:06:06
@XZX528 懂了,谢谢大佬