在我的C ++ CaesarCipher程序中出错

时间:2017-10-25 11:23:01

标签: c++ error-handling

我正在尝试用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;
}

2 个答案:

答案 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