Как сдвинуть строку влево в c++?
Всем привет ! Хотел написать код, который будет рисовать треугольник по типу:
*
* *
* *
* *
*********
Для первой звёздочки я решил сделать так:
int h;
cout << "Введие высоту треугольника: ";
cin >> h;
string Verh1(h - 1, ' '); //ГОТОВО
if (h % 2 != 0) {
cout << Verh1 << "*" << endl; //ГОТОВО
}
Но дальше возник вопрос по сдвигу следующих звёздочек влево. Как это можно осуществить ?
Я хотел рассмотреть 2 случая, когда высота будет нечётная и чётная. Для высоты равной 1 или 2, я решил сделать частный случай, а вот дальше я нарисовал схему, по которой должно всё работать, но осуществить её не смог ( фото ). Можно ли сделать как то сдвиг строки влево ?
Ответы (1 шт):
Не понимаю, зачем разделять четные и нечетные?
Все варианты нормально выводятся одним алгоритмом:
* * * * *
*** * * * * * *
***** * * * *
******* * *
*********
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, '*');