Как написать цикл, чтобы рамка подбирала размер под текст на языке С++?
В практике современной разработки на C++  применяют  libfmt или, у кого компилятор совсем новый, std::format:
fmt::print(
  "┌{0:─^{2}}┐\n"
  "│{1: ^{2}}│\n"
  "└{0:─^{2}}┘\n", "", "Hello, world!", 20);

┌────────────────────┐
│   Hello, world!    │
└────────────────────┘
Сохраняете ваши строки отдельно, затем проверяете их длину, запоминаете самую большую(с учетом пробелов и тд), затем начинаете формировать вашу таблицу, всё нужно делать в одной строке. Заполняете первую строку звездочками, потом ставите \n, делаете отступ и вставляете строку с лабой ну и тд.