chenmumin @ 2023-07-17 20:21:42
#include<bits/stdc++.h>
using namespace std;
int main(){
char s[55];
int n;
cin>>n>>s;
for(int i=0;s[i]!='\0';i++){
s[i]=s[i]+n;
if(s[i]+n>=123){
cout<<char(96+n);
}else cout<<s[i];
}
}
by Li_mz__ @ 2023-07-17 20:46:33
@chenmumin 《cin>>n>>s》
我记得数组好像大多数都用循环输入吧 除了string这个
by EricWH @ 2023-07-17 20:51:06
输入char要用循环吧
by Zzq198162 @ 2023-07-17 20:51:27
当字符超出字母范围时,输出的是固定的字符而不是根据偏移量变化的字符。
by Zzq198162 @ 2023-07-17 20:53:07
试试这个,把后面的改了 for(int i=0;s[i]!='\0';i++){ s[i]=s[i]+n; if(s[i]>'z'){ s[i] = s[i] - 'z' + 'a' - 1; } cout<<s[i]; }
by chenmumin @ 2023-07-17 21:00:31
@Li_mz__ 这样是没问题的
by chenmumin @ 2023-07-17 21:00:49
@EricWH 不用
by chenmumin @ 2023-07-17 21:02:29
@Zzq198162 还是60分啊!!!~
by bookchong @ 2023-07-17 21:12:41
首先,输入char数组可以不用循环
你错在这一句
cout<<char(96+n);
你想想,n是一个固定的数。如果输入n = 4,则
'y' + n >= 'z'('z'即123)
'z' + n >= 'z'
那么则'y'和'z'的结果是一样的
应该改成
cout << char(((s[i]-'a'+n)%26+'a'));
如果当前字符大于‘z’,则获取超过'z'的数值再加上'a'就是最终的结果
by bookchong @ 2023-07-17 21:13:09
@chenmumin
by chenmumin @ 2023-07-17 23:13:03
@Sun09426 ok 谢谢