Замена чисел в строке на двоичные

Задача: на входе дана строка, в которой встречаются разные числа и символы. Надо преобразовать все числа в строке в двоичную систему, а символы оставить на месте. Использовать си-строки. Написал код, а он какой-то китайский выдает, помогите найти ошибку, пожалуйста.

#include <iostream>
#include <cstring>
using namespace std;

char* convertToBinary(int y) {
    char* a = new char[4];
    int i = 0;
    while (y > 0) {
        if (y % 2 == 0)
            a[i] = '0';
        else
            a[i] = '1';
        y /= 2;
        i += 1;
    }
    return a;
}
int main()
{
    char* s = new char;
    
    int i, k = 1, x = 0;
    cin >> s;
    int len = strlen(s);
    char* b = new char[len];
    i = strlen(s) - 1;
    while (i >= 0) {
        if (s[i] >= '0' && s[i] <= '9') {
            x += (s[i] - '0') * k;
            k *= 10;
        }
        else if (s[i + 1] >= '0' && s[i + 1] <= '9') {
            const char* z = convertToBinary(x);
            strcat(b, z);
            b[strlen(b)] = s[i];
            x = 0;
            k = 1;
        }
        else {
            b += s[i];
        }
        i--;
    }
    if (x != 0) {
        const char* z = convertToBinary(x);
        strcat(b, z);
        
    }
    for (int j = strlen(b) - 1; j >= 0; j--)
        cout << b[j];
    return 0;
}

Ответы (0 шт):