提问,过了三个点。

P1914 小书童——凯撒密码

sanxin @ 2021-11-07 13:28:12


using namespace std;
int main(){
    char juruo[51];
    int n,huang;
    cin>>n;
    scanf("%s/n",juruo);
    huang=strlen(juruo);
        for(int i=0;i<huang;i++)
        {
            for(int g=0;g<n;g++){
                juruo[i]++;
                if(juruo[i]=='z')
                juruo[i]='a';
            }
        }
    cout<<juruo;
}

by _l_l_l_l_l_ @ 2021-11-07 13:51:16

scanf("%s/n",juruo);是啥?不是\n吗?


by __KrNalty__ @ 2021-11-07 13:53:20

注意 这里每一个字符都是应该先判断是不是z在进行++,并且如果当前字母为z,则应该变为a的前一个字符也就是'a' - 1而不是'a'

AC\ Code:
#include <bits/stdc++.h>
using namespace std;
int main(){
    char juruo[51];
    int n,huang;
    cin>>n;
    scanf("%s/n",juruo);
    huang=strlen(juruo);
        for(int i=0;i<huang;i++)
        {
            for(int g=0;g<n;g++){
                if(juruo[i]=='z')
                    juruo[i]='a' - 1;
                juruo[i]++;
            }
        }
    cout<<juruo;
}

还有下次这种问题可以自己找出来的尽量自己找出来,别老发帖,也可以下载数据之类的。


by __KrNalty__ @ 2021-11-07 13:54:19

@sanxin


by __KrNalty__ @ 2021-11-07 13:55:16

可以/n的好像,虽然我用的是\n


by Ak117 @ 2021-11-12 16:58:26

#include <cstdio>
#include <cstring>
bool c[50];
int main(){
    char a[51];
    int b;
    scanf("%d%s",&b,a);
    int l=strlen(a);
    for(int i=0;i<l;i++){
        if(a[i]>='A'&&a[i]<='Z'){
            c[i]=0;
        }
        if(a[i]>='a'&&a[i]<='z'){
            c[i]=1;
            a[i]-='a'-'A';
        }
        a[i]+=b;
        if(a[i]>'Z'){
            a[i]-=26;
        }
        if(c[i]){
            a[i]+='a'-'A';
        }
    }

    printf("%s",a);
    return 0;
}

氧化还原法(首创)

1.用c数组记大小写

2.转大写

3.移位

4.还原大小写


|