用c++在VS上编写维吉尼亚密码时,运行后只输出一个字母然后就报错,有木有人解答一下

问题遇到的现象和发生背景

用c++在VS上编写维吉尼亚密码时,运行后只输出一个字母然后就报错

遇到的现象和发生背景,请写出第一个错误信息
用代码块功能插入代码,请勿粘贴截图。 不用代码块回答率下降 50%
#include;
using namespace std;
int main() {

    /*输入明文,并区分大小写转化为数字*/
    string str;
    cin >> str;
    int i = str.length(), f;//i为明文长度
    for (f = 0; f < i; f++) {
        if (str[f] < 97) { str[f] = str[f] - 65; }
        else { str[f] = str[f] - 97; ; }
    }
    /*输入密钥,并调整密文长度与明文长度一致*/
    string str2;
    cin >> str2;
    int l = str2.length(), m;//l为密文长度
    if (l < i) {
        for (int a = 0; l < i; l++, a++) {
            str2[l] = str2[a];
        }
    }
    else {
        for (int a = 0; l > i; a++, i++) { str[i] = str[a]; }
    }
    for (int a = 0; a < l; a++) {
        if (str2[a] < 97) { str2[a] = str2[a] - 65; }
        else { str2[a] = str2[a] - 97; ; }
    }
    /*输出密文*/
    string str3;
    for (int b = 0; b < l; b++) { str3[b] = (str[b] + str2[b]) % 26 + 'a'; cout << str3[b]; }
    return 0;

}



运行结果及详细报错内容

img

我的解答思路和尝试过的方法,不写自己思路的,回答率下降 60%

有木有人解答一下

我想要达到的结果,如果你需要快速回答,请尝试 “付费悬赏”

在引入头文件时,应该使用 #include 而不是 #include;。

在定义 int 变量时,应该将变量名和类型分开,例如 int i = 0 而不是 int i=0。

在循环语句中,应该为循环变量定义类型,例如 for(int a = 0; a < 10; a++) 而不是 for(a = 0; a < 10; a++)。

在输出语句中,应该使用 cout 而不是 printf。

在下标运算符中,应该使用中括号,例如 str[a] 而不是 str(a)。

在给字符串分配空间时,应该使用 string str = "" 或 string str(n, ' ') 的形式而不是直接声明字符串变量,例如 string str;。