解密用 CodeBlocks 制作的简单句子的代码崩溃而不输出单个字符

问题描述

我正在制作一个程序,输入字母顺序来加密一个句子来解密它(只是替换字符)。我需要输入它的字数,但我使用的方法不需要它,所以我只输入它而不用它做任何事情(这无关紧要,因为 AI 将只验证输出该程序)。我想我想出了一个不错的算法,但是在我输入加密的句子后程序一直崩溃。我尝试改变很多东西,但似乎没有解决问题。另外,对于代码中没有意义的任何事情,我很抱歉,我只是一个初学者。请帮助我阻止程序崩溃,以便我可以在明天结束前提交。

这是我的代码

#include <iostream>
#include <string>
using namespace std;

int main()
{
    int n,i,j;
    string key,encrypted;
    cin >> key;
    char alphabet[]={'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'};
    cin >> n;
    getline(cin>>ws,encrypted);
    for (i=0;i<=encrypted.size();i++)
    {
        for (j=0;j<encrypted.size();j++)
        {
            if (encrypted[i]==key[j])
            {
                cout << alphabet[j];
            }
            else if (encrypted[i]==key[j]+32)
            {
                cout << alphabet[j]+32;
            }
            else if (encrypted[i]==' ')
            {
                cout << " ";
            }
        }
    }
}

解决方法

您的程序存在以下错误:

第一个错误:

正如评论部分已经指出的,你应该改变这一行

for (j=0;j<encrypted.size();j++)

for (j=0;j<key.size();j++)

第二个错误:

由于 integer promotion,表达式 alphabet[j]+32; 将计算为 int 类型的值,而不是 char。这意味着

cout << alphabet[j]+32;

将打印一个数字,而不是一个字符。因此,您必须将表达式的结果强制转换回数据类型 char,如下所示:

cout << static_cast<char>( alphabet[j]+32 );

第三个错误:

线

cout << " ";

应该在每次外循环迭代中只调用一次,即字符串 encrypted 中的每个字符一次。但是,每次内部循环迭代都会调用它一次,这意味着每个字符都会调用它几次。因此,您应该将该语句从内循环中移除,并将其放入外循环中。

第四个错误:

线

for (i=0;i<=encrypted.size();i++)

错了。它应该是 < 而不是 <=。否则,你也会处理字符串的终止空字符,没有意义。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...