Получение или написание функции библиотеки автоматически вставлять ведущие пробелы и новые строки, подходящие для определенной ширины вывода, были бы хорошей идеей. Этот веб-сайт рассматривает рекомендации по библиотеке вне темы, но я включил некоторый код ниже - не особенно эффективный, но понятный. Основная логика должна состоять в том, чтобы перепрыгнуть вперед в строке до максимальной ширины, а затем переместиться назад, пока не найдете пробел (или, возможно, дефис), в котором вы готовы сломать линию ... затем распечатайте ведущие пробелы, а остальные часть линии. Продолжайте, пока не закончите.
#include <iostream>
std::string fmt(size_t margin, size_t width, std::string text)
{
std::string result;
while (!text.empty()) // while more text to move into result
{
result += std::string(margin, ' '); // add margin for this line
if (width >= text.size()) // rest of text can fit... nice and easy
return (result += text) += '\n';
size_t n = width - 1; // start by assuming we can fit n characters
while (n > width/2 && isalnum(text[n]) && isalnum(text[n - 1]))
--n; // between characters; reduce n until word breaks or 1/2 width left
// move n characters from text to result...
(result += text.substr(0, n)) += '\n';
text.erase(0, n);
}
return result;
}
int main()
{
std::cout << fmt(5, 70,
"This is essentially what I do with large blocks of "
"descriptive text. It lets me see how long each of "
"the lines will be, but it's really a hassle, see?");
}
Это не было проверено очень тщательно, но, похоже, работает. См. Прогон here. Для некоторых альтернатив см. this SO question.
BTW, исходный код может быть упрощен ...
cout << " This is essentially what I do with large blocks of\n"
" descriptive text. It lets me see how long each of\n"
" the lines will be, but it's really a hassle, see?\n";
..., как C++ рассматривает заявление незавершенного, пока он не попадет в точке с запятой, и двойными кавычками строковых литералов, которые появляются рядом друг с другом в коде конкатенируются автоматически, как если бы внутренние двойные кавычки и пробелы были удалены.
Использование файла заголовка предоставляет различные функции для форматирования текста –
@RohitSaluja, вы можете быть более конкретным? Единственный, который я вижу в списке, который я нашел, будет 'setw()', который, я думаю, не работает. Или вы могли бы разместить пример того, как вы это сделаете? – Hammurabi8