Замена чисел в строке на двоичные
Задача: на входе дана строка, в которой встречаются разные числа и символы. Надо преобразовать все числа в строке в двоичную систему, а символы оставить на месте. Использовать си-строки. Написал код, а он какой-то китайский выдает, помогите найти ошибку, пожалуйста.
#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;
}