c++60分,求助大佬

P1914 小书童——凯撒密码

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 谢谢


|