Это проще сделать, составив более длинную строку и используя скользящее представление.
Это довольно просто в C ++:
#include <iostream>
#include <string>
#include <string_view>
void printpattern(std::size_t n)
{
const auto s = std::string(n, ' ') + std::string(n, '*') + std::string(n, ' ');
for (std::size_t i = 1; i < n*2; ++i)
std::cout << std::string_view(s.data()+i, n) << '\n';
}
int main()
{
printpattern(5);
}
Конечно, вы можете сделать пробел издлина n-1
с обеих сторон, и используйте более обычный цикл, начинающийся с нуля i:
const auto s = std::string(n - 1, ' ') + std::string(n, '*')
+ std::string(n-1, ' ');
for (std::size_t i = 0; i < n * 2 - 1; ++i)
Вам решать, стоит ли сохранять два символа временной строки.