c++ - what(): basic_string::_M_construct null 无效错误
问题描述
#include<iostream>
#include<string>
using namespace std;
string generateKey(string str, string key)
{
int x = str.size();
for(int i=0; ;i++)
{
if(x==i)
i=0;
if(key.size() == str.size())
break;
key.push_back(key[i]);
}
return key;
}
string cipherText(string str, string key)
{
string cipher_text;
for(int i=0; i<str.size(); i++)
{
int x=(str[i]+key[i])%26;
x+='A';
cipher_text.push_back(x);
}
return cipher_text;
}
string originalText(string cipher_text, string key)
{
string orig_text;
for(int i=0;i<cipher_text.size(); i++)
{
int x=(cipher_text[i]-key[i] +26)%26;
x +='A';
orig_text.push_back(x);
}
return orig_text;
}
int main()
{
int x;
cout<<"Enter your choice"<<endl;
cout<<"1. Mono-alphabetic\n2. Poly-alphabetic\n";
cin>>x;
switch(x)
{
case 1:
cout<<"Mono-alphabetic cipher"<<endl;
cout<<"Enter your choice \n 1.Encryption\n 2.Decryption\n";
int b;
cin>>b;
switch(b)
{
case 1:
int k,i;
char plainText[100];
cout<<"Encryption\n";
cout<<"Enter Plain text"<<endl;
cin>>plainText;
cout<<"Enter Encryption key"<<endl;
cin>>k;
for(i=0;(i<100 && plainText[i]!='\0');i++)
plainText[i]=plainText[i]+k;
cout<<"\n Encrypted text:"<<plainText<<endl;
break;
case 2:
int d;
char encrypedText[100];
cout<<"Decryption\n";
cout<<"Enter Encrypted text"<<endl;
cin>>encrypedText;
cout<<"Enter Decryption key"<<endl;
cin>>d;
for(i=0;(i<100 && encrypedText[i]!='\0');i++)
encrypedText[i]=encrypedText[i]-d;
cout<<"\n Decrypted text:"<<encrypedText<<endl;
break;
default:
cout<<"WRONG Choice Entered!!!\n";
break;
}
case 2:
{
cout<<"Poly-alphabetic"<<endl;
string str ="PLANTTHATBOMBTHERE";
string keyword="AMAZON";
string key =generateKey(str,key);
string cipher_text = cipherText(str,key);
cout<<"Ciphertext:"<<cipher_text<<endl;
cout<<"Original text:"<<originalText(cipher_text, key);
break;
break;
}
}
}
此代码用于替换密码,多字母密码部分未运行,显示 std::logic_error 错误和 what(): basic_string::_M_construct null not valid 错误请帮助第一部分运行正常,没有任何错误,但多字母密码部分不显示任何编译错误它只显示运行时错误
解决方案
string keyword="AMAZON";
string key =generateKey(str,keyword);
string cipher_text = cipherText(str,key);
cout<<"Ciphertext:"<<cipher_text<<endl;
您正在使用 key 变量作为参数在它获取内存之前运行。试试上面的代码。
推荐阅读
- html - 在下一个 js sass 模块中覆盖内联 CSS
- reactjs - 由于 React 懒惰的悬念,如何缓存 bust 代码拆分?
- javascript - Mongodb如何对计算值进行四舍五入
- arrays - 无法回答字母 C、D 和 E - ARRAY
- python - 如何计算这些函数的时间复杂度
- python-3.x - 使用 Python TKinter 文本框中的用户输入更改字体样式和大小
- json - SQL Server:比较json并查找新添加,更改和删除的记录
- html - 我们可以在输入字段中显示数据列表的内容而不是它的值吗
- c++ - 如何在 C++ 中找到 100 的阶乘?
- angular - Angular FormGroup验证输入文件上传