我正在尝试用c ++创建一个caesar密码,但是在尝试构建程序时,我一直遇到这个错误,有什么帮助吗? 我收到的错误如下:
在抛出'std :: logic_error'实例后终止调用 what():basic_string :: _ M_construct null无效Aborted(核心 倾倒)
以下是代码:
#include <stdio.h>
#include <iostream>
#include <string>
using namespace std;
string caesarCipher(string text, int ciphe);
int main(void) {
string text, encodedString;
int ciphe = 0;
cout << "Please enter a word: ";
getline(cin, text);
cout << "Key: ";
cin >> ciphe;
encodedString = caesarCipher(text, ciphe);
cout <<"Encrypted: " << encodedString << "\n";
return 0;
}
string caesarCipher(string text, int ciphe)
{
string temp = text;
int length;
length = (int)temp.length();
for (int i = 0; i < length; i++)
{
if(isalpha(temp[i]))
{
for (int x = 0; x < ciphe; x++)
{
if (temp[i] == 'z')
{
temp[i] = 'a';
}
else
{
temp[i]++;
}
}
}
}
return 0;
}
答案 0 :(得分:1)
实际上,除了caesarCipher
例程中存在一个小错误外,我没有遇到任何编译错误。
您必须实际返回temp
字符串而不是0
才能获得正确答案。
正确的代码应该是
string caesarCipher(string text, int ciphe)
{
string temp = text;
int length;
length = (int)temp.length();
for (int i = 0; i < length; i++)
{
if(isalpha(temp[i]))
{
for (int x = 0; x < ciphe; x++)
{
if (temp[i] == 'z')
{
temp[i] = 'a';
}
else
{
temp[i]++;
}
}
}
}
return temp;
}
答案 1 :(得分:0)
我的代码不会遇到任何编译错误。它在我的机器上成功编译,我也用ideone进行交叉检查。它正在正确编译。
在函数末尾添加return temp;
语句,而不是return 0;
点击此处 - http://cpp.sh/5eo2r