小 问题

P1914 小书童——凯撒密码

Error_404 @ 2021-07-22 16:12:29

#include<bits/stdc++.h>
using namespace std;
int main()
{
    char a[26]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
    int n;
    cin>>n;
    string pw;
    char ps[51];
    cin>>pw;
    for(int i=0;i<=pw.length();i++)
    {
        for(int j=0;j<=26;j++)
        {
            if(pw[i]==a[j])
            {
                ps[i]=pw[i];
                if(j+n<=26)
                {
                    ps[i]=a[j+n];
                }
                else 
                {
                    ps[i]=a[j+n-26];
                }
            }
        }
        cout<<ps[i];
    }
}

运行例子

例一

输入数据

1
z

输出结果

@
例二

输入数据

4
werv

输出结果

@ivz

可见这个程序 -------把 a”变成“@”------- 了....

@的ASCII码和a的ASCII码差了不止一点点......

(诚恳)有大佬知道这个是什么吗?

还是我写错了?


by 君の名 @ 2021-07-22 16:15:58

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
string a;
int main()
{
    int n;
    cin>>n;
    cin>>a;
    int m=a.size();
    for(int i=0;i<m;i++)
    {
        for(int j=1;j<=n;j++)
        {
        a[i]++;
        if(a[i]>'z')
        a[i]='a';
        }
    }
    cout<<a;
    return 0;
}

by simple_dream @ 2021-07-22 16:17:34

把亿些小于等于改成小于就可以了


by 君の名 @ 2021-07-22 16:17:39

枚举容易出错,你得挨个儿判断


by Error_404 @ 2021-07-22 16:20:17

@W文韬武略W

已解决,感谢

不过:为什么?


by simple_dream @ 2021-07-22 16:20:26

#include<bits/stdc++.h>
using namespace std;
int main()
{
    char a[26]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
    int n;
    cin>>n;
    string pw;
    char ps[51];
    cin>>pw;
//    for(int i=0;i<pw.length();i++)
    {
//        for(int j=0;j<26;j++)
        {
            if(pw[i]==a[j])
            {
                ps[i]=pw[i];
//                if(j+n<26)
                {
                    ps[i]=a[j+n];
                }
                else 
                {
                    ps[i]=a[j+n-26];
                }
            }
        }
        cout<<ps[i];
    }
}

by simple_dream @ 2021-07-22 16:28:21

因为数组是从0开始的,所以是0到25

pw.length()返回的是长度,是取不到的,应该是从 0 到 长度 - 1

语文不好,见谅


by Error_404 @ 2021-07-22 16:38:58

已解决,谢谢各位


|