Вставить в строку пробелы с конца

Суть в том, что надо вставить пробелы в массив типа char с конца через каждые 3 символа, чтобы введя 1234567890, на выходе получалось 1 234 567 890. Я смог только обратится к концу массива, однако как вставить пробелы я без понятия. Буду благодарен за любую помощь

int main() {
    setlocale(0, "");
    srand(time(0));
 
    const int size = 80;
    char num[size]; 
 
    cout << "Enter number: ";
    cin.getline(num, size);
 
    char* num_end = &num[strlen(num) - 1];
    for (int i = 0; i < strlen(num); i++) {
        
    }
    
 
    system("pause");
    return 0;
}

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

Автор решения: Harry

Проще всего, если в новую строку переписывать... Раз у вас С++, возьмем для этой цели string. Дальше просто смотрим остаток от деления на 3 - столько символов в первой "тройке".

Так что без оптимизаций и изысков - примерно так:

char s[] = "51218589752154146154";
cout << s << endl;


string r;
int L = strlen(s);
int m = L%3;
if (m == 0) m = 3;
for(int i = 0; i < L; ++i)
{
    r += s[i];
    if (--m == 0 && i != L-1) { m = 3; r += ' '; }
}


cout << r << endl;

Переписывание в массив char выполняется аналогично.

→ Ссылка
Автор решения: Павел Ериков

Вот пример кода с комментариями:

int real_size = strlen(num);
//Количество отступов
int count = real_size / 3 + (bool)(real_size % 3) - 1;
//Обрезаем нашу новую строку
num[real_size + count] = '\0';
//Проходим по всем тройкам с конца, кроме первой
for (int i = real_size - 1; i >= 3; i -= 3) {
    //Можно без цикла просто перенести три символа назад на count позиций
    for (int j = 0; j < 3; ++j)
        num[i + count - j] = num[i - j];
    --count;
    num[i + count - 2] = ' ';
}

Объясню идею через пример.

Есть строка 1234567 у нее count = 2 т.к. в итоге получим 2 пробела. И первую с конца тройку мы сместим сначала на 2 позиции. Т.к. мы знаем что будет еще одна тройка, которую мы уже сместим на 1 позицию. Получается каждую следующую тройку мы будем смещать на 1 позицию меньше, чем предыдущую. Надеюсь понятно объяснил.

→ Ссылка