为什么这样写是错的?

题目:
给定一个字符串 a,请你按照下面的要求输出字符串 b。

给定字符串 a 的第一个字符的 ASCII 值加第二个字符的 ASCII 值,得到 b 的第一个字符;

给定字符串 a 的第二个字符的 ASCII 值加第三个字符的 ASCII 值,得到 b 的第二个字符;

给定字符串 a 的倒数第二个字符的 ASCII 值加最后一个字符的 ASCII 值,得到 b 的倒数第二个字符;

给定字符串 a 的最后一个字符的 ASCII 值加第一个字符的 ASCII 值,得到 b 的最后一个字符。

代码:

#include<iostream>

using namespace std;

int main()
{
    string a,b;
    
    getline(cin,a);
    
   
    for(int i=0;i+1<a.size();i++)
        b[i]=char(a[i]+a[i+1]);
    
    b+=char(a.back()+a[0]);
    
    cout<<b<<endl;
    
    return 0;
}

//循环技巧:最后一位跳到第一位:
//(i + 1) % a.size(); 

#include<iostream>

using namespace std;

int main()
{
    string a, b;
    getline(cin, a);
    b = a;
    
    for (int i = 0; i < a.size(); i ++)
    {
        b[i] = (char)(a[i] +a[(i + 1) % a.size()]);
    }
    cout << b << endl;
    return 0;
}

#include<iostream>
using namespace std;
int main()
{
    //string a, b;
    char a[1024] = {}, b[1024] = {};
    //getline(cin, a);
    cin.getline(a, 1024);

    int i = 0;
    for (i = 0; i + 1 < ::strlen(a); i++)
        b[i] = char(a[i] + a[i + 1]);
    //跳出循环后i指向的位置为a的最后一个字符位置
    b[i] += char(a[i] + a[0]);
    cout << b << endl;
    return 0;
}

#include<iostream>
#include<fstream>
#include<string>
using namespace std;
int main()
{
    string a, b;
    getline(cin, a);
    b = a;
    int i;
    for (i = 0; i + 1 < a.size(); i++)
        b[i] = (a[i] + a[i + 1]) % 127;
    b[i] += (a[i] + a[0]) % 127;
    cout << b << endl;
    return 0;
}

加一句 b = a,否则b没有分配内存空间无法进行操作

#include <iostream>
using namespace std;
int main()
{
    string a, b;
    getline(cin, a);
    b = a;
    for (int i = 0; i + 1 < a.size(); i++)
    {

        b[i] = char(a[i] + a[i + 1]);
    }
    b[a.size() - 1] = char(a.back() + a[0]);
    cout << b << endl;
    return 0;
}