Вставить в строку пробелы с конца
Суть в том, что надо вставить пробелы в массив типа 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 шт):
Проще всего, если в новую строку переписывать... Раз у вас С++, возьмем для этой цели 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 позицию меньше, чем предыдущую. Надеюсь понятно объяснил.