Как сдвинуть строку влево в c++?

Всем привет ! Хотел написать код, который будет рисовать треугольник по типу:

    *
   * *
  *   *
 *     *
*********

Для первой звёздочки я решил сделать так:

int h;
cout << "Введие высоту треугольника: ";
cin >> h;

string Verh1(h - 1, ' '); //ГОТОВО

if (h % 2 != 0) {
    cout << Verh1 << "*" << endl; //ГОТОВО 
}

Но дальше возник вопрос по сдвигу следующих звёздочек влево. Как это можно осуществить ? Я хотел рассмотреть 2 случая, когда высота будет нечётная и чётная. Для высоты равной 1 или 2, я решил сделать частный случай, а вот дальше я нарисовал схему, по которой должно всё работать, но осуществить её не смог ( фото ). Можно ли сделать как то сдвиг строки влево ?введите сюда описание изображения


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

Автор решения: Laukhin Andrey

Не понимаю, зачем разделять четные и нечетные?
Все варианты нормально выводятся одним алгоритмом:

*   *    *      *        *
   ***  * *    * *      * *
       *****  *   *    *   *
             *******  *     *
                     *********
int w = h * 2 - 1;
int p = w / 2, i = 0;

while(i < p) {
    cout << string(p - i, '.') << "*";
    if(i > 0) cout << string(i * 2 - 1, '.') << "*";
    cout << endl;
    i++;
}

cout << string(w, '*');

Сначала определяем ширину треугольника и середину. При первой итерации выводим только звездочку. В последующих добавляем хвост.

Извините, не удержался:

string s = string(h * 2, '.') + "*";

for(int i = 0; i < h - 1; i++)
    cout << s.c_str() + h + i + 1 << s.c_str() + s.size() - i * 2 << endl;

cout << string(s.size() - 2, '*');
→ Ссылка