将字母向前移动 3 个字母的程序,错误:在抛出 'std::out_of_range' 实例后调用终止

A. 金

所以我正在开发一个简单的程序,它使用 Caesar Cipher 转换普通字符串,它只是将字符串的字母向前移动 3 次,然后解密它,只需撤消它(非常基本的东西),就像我的一个简单测试对 c++ 的理解(我是初学者)并且我收到的错误不是在我的 IDE(代码::块)中,而是在控制台中:

terminate called after throwing an instance of 'std::out_of_range'
what():  basic_string::at: __n (which is 1) >= this->size() (which is 0)

这是我的代码:

#include <iostream>
#include <string>

using namespace std;

int main()
{
string input;
string conversion;
cin >> input;
for(unsigned int i = 1; i<input.length(); i++){
    if(input.at(i) == 'a' || input.at(i) == 'A'){
        conversion.at(i) = 'D';
    }
     if(input.at(i) == 'b' || input.at(i) == 'B'){
        conversion.at(i) = 'E';
    }
     if(input.at(i) == 'c' || input.at(i) == 'C'){
        conversion.at(i) = 'F';
    }
     if(input.at(i) == 'd' || input.at(i) == 'D'){
        conversion.at(i) = 'G';
    }
     if(input.at(i) == 'e' || input.at(i) == 'E'){
        conversion.at(i) = 'H';
    }
     if(input.at(i) == 'f' || input.at(i) == 'F'){
        conversion.at(i) = 'I';
    }
     if(input.at(i) == 'g' || input.at(i) == 'G'){
        conversion.at(i) = 'J';
    }
     if(input.at(i) == 'h' || input.at(i) == 'H'){
        conversion.at(i) = 'K';
    }
    if(input.at(i) == 'i' || input.at(i) == 'I'){
        conversion.at(i) = 'L';
    }
      if(input.at(i) == 'j' || input.at(i) == 'J'){
        conversion.at(i) = 'M';
    }
      if(input.at(i) == 'k' || input.at(i) == 'K'){
        conversion.at(i) = 'N';
    }
      if(input.at(i) == 'l' || input.at(i) == 'L'){
        conversion.at(i) = 'O';
    }
      if(input.at(i) == 'm' || input.at(i) == 'M'){
        conversion.at(i) = 'P';
    }
      if(input.at(i) == 'n' || input.at(i) == 'N'){
        conversion.at(i) = 'Q';
    }
      if(input.at(i) == 'o' || input.at(i) == 'O'){
        conversion.at(i) = 'R';
    }
      if(input.at(i) == 'p' || input.at(i) == 'P'){
        conversion.at(i) = 'S';
    }
      if(input.at(i) == 'q' || input.at(i) == 'Q'){
        conversion.at(i) = 'T';
    }
      if(input.at(i) == 'r' || input.at(i) == 'R'){
        conversion.at(i) = 'U';
    }
      if(input.at(i) == 's' || input.at(i) == 'S'){
        conversion.at(i) = 'V';
    }
      if(input.at(i) == 't' || input.at(i) == 'T'){
        conversion.at(i) = 'W';
    }
      if(input.at(i) == 'u' || input.at(i) == 'U'){
        conversion.at(i) = 'X';
    }
      if(input.at(i) == 'v' || input.at(i) == 'V'){
        conversion.at(i) = 'Y';
    }
      if(input.at(i) == 'w' || input.at(i) == 'W'){
        conversion.at(i) = 'Z';
    }
      if(input.at(i) == 'x' || input.at(i) == 'X'){
        conversion.at(i) = 'A';
    }
      if(input.at(i) == 'y' || input.at(i) == 'Y'){
        conversion.at(i) = 'B';
    }
      if(input.at(i) == 'z' || input.at(i) == 'Z'){
        conversion.at(i) = 'C';
    }
    if(input.at(i) == ' '){
        conversion.at(i) = ' ';
    }

}
cout << conversion << endl;
return 0;

}

我不明白如何修复错误,我想帮助修复它。

库巴没有忘记莫妮卡

您正在尝试在conversion长度为零的 string 中设置字符这就是您收到错误的原因。at()对该字符串的所有调用都是无效的。

您需要先将输入字符串复制到 中conversion,然后再进行修改。或者有reserve足够的空间和push_back字母进去。或者干脆一直使用input

您还可以以不那么冗长的方式进行“移位 3”,并尊重案例。

并且您希望一次读取整行输入,而不仅仅是单个字符串——因为这样的字符串永远不能包含空格:这就是获取一行与仅获取一个字符串之间的区别。

#include <iostream>
#include <string>

int main() {
  using namespace std;
  while (true) {
    string input;
    cout << "> " << flush;
    if (!getline(cin, input) || input.empty()) return 0;
    cin >> ws; // consume '\n'
    for (char &c : input) {
      char base = '\0';
      if (c >= 'a' && c<= 'z') base = 'a';
      else if (c >= 'A' && c <= 'Z') base = 'A';
      if (base) {
        c -= base;
        c = (c + 3) % ('z' - 'a');
        c += base;
      }
    }
    cout << "< " << input << endl;
  }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

抛出'std :: out_of_range'实例后调用终止

来自分类Dev

抛出'std :: out_of_range'实例后调用终止

来自分类Dev

抛出'std :: out_of_range'what():vector :: _ M_range_check实例后终止调用

来自分类Dev

在C ++中抛出'std :: out_of_range'实例后调用终止

来自分类Dev

比较二进制数字输入的字符时,抛出'std :: out_of_range实例后调用终止

来自分类Dev

"if (argc < 2 || argc > 2)" 应该有 2 个参数吗?& 在抛出“std::out_of_range”错误实例后调用终止

来自分类Dev

在抛出 std::exception 实例后调用终止

来自分类Dev

C ++向量:std :: out_of_range错误

来自分类Dev

以类型为std :: out_of_range的未捕获异常终止终止错误

来自分类Dev

std :: stoi,std :: setbase和std :: out_of_range错误

来自分类Dev

C ++中带有矢量的'std :: out_of_range'实例

来自分类Dev

libc ++ abi.dylib:以类型为std :: out_of_range的未捕获异常终止:basic_string错误吗?

来自分类Dev

合并排序算法中的 C++“以未捕获的 std::out_of_range 类型异常终止:向量”错误

来自分类Dev

抛出'std :: regex_error'实例后调用终止

来自分类Dev

抛出'std :: regex_error'实例后调用终止

来自分类Dev

在抛出“std::system_error”实例后调用 Tensorflow 终止

来自分类Dev

Microsoft C ++异常:std :: out_of_range错误?

来自分类Dev

抛出“std::invalid_argument”实例后调用终止 what(): leetcode 问题中的 stoi 错误

来自分类Dev

如何解决错误'std :: out_of_range'what():_M_range_check,向量将接受值,直到被告知要中断

来自分类Dev

如何解决错误'std :: out_of_range'what():_M_range_check,向量将接受值直到被告知要中断

来自分类Dev

C++ 合并排序实现中抛出的 std::out_of_range 异常

来自分类Dev

Node.js错误“抛出'std :: bad_alloc'what():std :: bad_alloc实例后调用终止”

来自分类Dev

使用gcc编译代码后,不会输出std :: out_of_range异常字符串

来自分类Dev

使用gcc编译代码后,不会输出std :: out_of_range异常字符串

来自分类Dev

为什么在抛出'std :: bad_alloc'实例后终止调用?

来自分类Dev

抛出“std::system_error”线程池实例后调用终止

来自分类Dev

抛出'std::bad_alloc'的实例后调用C++终止

来自分类Dev

在抛出“std::regex_error”what() 实例后调用终止:括号未关闭

来自分类Dev

使用相同函数时意外收到“std::out_of_range”错误

Related 相关文章

  1. 1

    抛出'std :: out_of_range'实例后调用终止

  2. 2

    抛出'std :: out_of_range'实例后调用终止

  3. 3

    抛出'std :: out_of_range'what():vector :: _ M_range_check实例后终止调用

  4. 4

    在C ++中抛出'std :: out_of_range'实例后调用终止

  5. 5

    比较二进制数字输入的字符时,抛出'std :: out_of_range实例后调用终止

  6. 6

    "if (argc < 2 || argc > 2)" 应该有 2 个参数吗?& 在抛出“std::out_of_range”错误实例后调用终止

  7. 7

    在抛出 std::exception 实例后调用终止

  8. 8

    C ++向量:std :: out_of_range错误

  9. 9

    以类型为std :: out_of_range的未捕获异常终止终止错误

  10. 10

    std :: stoi,std :: setbase和std :: out_of_range错误

  11. 11

    C ++中带有矢量的'std :: out_of_range'实例

  12. 12

    libc ++ abi.dylib:以类型为std :: out_of_range的未捕获异常终止:basic_string错误吗?

  13. 13

    合并排序算法中的 C++“以未捕获的 std::out_of_range 类型异常终止:向量”错误

  14. 14

    抛出'std :: regex_error'实例后调用终止

  15. 15

    抛出'std :: regex_error'实例后调用终止

  16. 16

    在抛出“std::system_error”实例后调用 Tensorflow 终止

  17. 17

    Microsoft C ++异常:std :: out_of_range错误?

  18. 18

    抛出“std::invalid_argument”实例后调用终止 what(): leetcode 问题中的 stoi 错误

  19. 19

    如何解决错误'std :: out_of_range'what():_M_range_check,向量将接受值,直到被告知要中断

  20. 20

    如何解决错误'std :: out_of_range'what():_M_range_check,向量将接受值直到被告知要中断

  21. 21

    C++ 合并排序实现中抛出的 std::out_of_range 异常

  22. 22

    Node.js错误“抛出'std :: bad_alloc'what():std :: bad_alloc实例后调用终止”

  23. 23

    使用gcc编译代码后,不会输出std :: out_of_range异常字符串

  24. 24

    使用gcc编译代码后,不会输出std :: out_of_range异常字符串

  25. 25

    为什么在抛出'std :: bad_alloc'实例后终止调用?

  26. 26

    抛出“std::system_error”线程池实例后调用终止

  27. 27

    抛出'std::bad_alloc'的实例后调用C++终止

  28. 28

    在抛出“std::regex_error”what() 实例后调用终止:括号未关闭

  29. 29

    使用相同函数时意外收到“std::out_of_range”错误

热门标签

归档