Форматирование текста по ширине

Помогите, пожалуйста с доработкой программы. Написала все, что смогла, остальное не могу продумать уже несколько дней. Нужно реализовать программу: Имеется текст, разделенный на абзацы.Отформатировать его по k символов в строке,выравнивая строки на правый и левый края и сохраняя деление на абзацы.

#include <iostream>
#include <cstdio>
#include <string> // для getline
#include <fstream> // подключаем библиотеку для чтения из файла


using namespace std;

int OutputText(char* filename);
int FormatText(char* filename);
int OutFormatText(char* filename);

int OutputText(char* filename)
{
	std::string line;
	ifstream file; // создаем объект класса ifstream
	file.open("C:\\Users\\User\\source\\repos\\kr\\text.txt", ios::in); //открываем файл
	if (file) //проверка на открытие файла
	{
		while (!file.eof()) //пока не конец файла, считываем текст
		{
			while (getline(file, line))
				std::cout <<line << std::endl;
			cout << "\n";
		}
		file.close(); //закрываем файл
	}
	else cout << "File not open!\n\n" << endl;
	system("pause");
	return 0;
}

int FormatText(char* filename)
{
	//считываем из файла текст в массив
	/*const int len = 255; const int strings = 22;//макс длина строк и количества строк
	const char ch = '\n';//разделяющий символ
	char mass[len][strings];//масив символов
	ifstream file("C:\\Users\\User\\source\\repos\\kr\\text.txt", ios::in | ios::binary); //открываем файл для чтения
	//открылся ли файл
	if (!file)
		return 1;
	for (int r = 0; r < strings; r++)
	{
		file.getline(mass[r], len - 1, ch); //считываем строки в массив
	}
	file.close();
//должна быть программа форматирования

cout << "End programming\n" << endl;
	return 0;
} 

int OutFormatText(char* filename)
{
	std::string line;
	ifstream file2; // создаем объект класса ifstream
	file2.open("C:\\Users\\User\\source\\repos\\kr\\text2.txt", ios::in); //открываем файл
	if (file2) //проверка на открытие файла
	{
		while (!file2.eof()) //пока не конец файла, считываем текст
		{
			while (getline(file2, line))
				std::cout << line << std::endl;
			cout << "\n";
		}
		file2.close(); //закрываем файл
	}
	else cout << "File not open!\n\n" << endl;
	system("pause");
	return 0;
}

int main()
{
	int input; char fname[255];
	do {
		cout << "Select an option\n" << endl;
		cout << "1.Input text the display\n"
			<< "2.Text formatting\n"
			<< "3.Converting text\n"
			<< "4.Exit\n" << endl;
		cout << "Selection: ";
		cin >> input;
		getchar();
		switch (input)
		{
		case 1:
			system("cls");
			OutputText(fname);
			break;
		case 2:
			system("cls");
			FormatText(fname);
			break;
		case 3:
			system("cls");
			OutFormatText(fname);
			break;
		case 0:
			cout << "Goodbay!" << endl;
			break;
		default:
			cout << "Error\n";
			break;
		}
	} while (input != 0);
	cout << endl;
	return 0;
}

Общий алгоритм

  1. прочитал строку
  2. узнал длину строки 1
  3. (НужнаяДлинаСтроки - длинаП2) / 2
  4. Добавить слева и справа строки с п.1 столько пробелов, сколько получили в п.3

Насколько я поняла так, но проблемы с 4 пунктом, не знаю, как это сделать
изображение

не умею в плюсах, подгоните под себя

#include <iostream>

using namespace std;

int
main ()
{
  int n = 75;
  string s = "HEllo World";
  cout << "'" << s << "'" << endl;
  int spaces = (n - s.length ()) / 2;
  cout << "'" << std::string (spaces, ' ') << s << std::string (spaces,
								' ') << "'";
  return 0;
}


https://onlinegdb.com/HyB6eruOd