如何解决解密用 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++)
错了。它应该是 <
而不是 <=
。否则,你也会处理字符串的终止空字符,没有意义。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。