Как заставить мой код работать так, чтобы не обрезать слова (строки)?

Целью этой программы должно быть создание выходной строки, такой что:

  1. Выходная строка + пробелы между == шириной.
  2. Строки не отрезать. Таким образом, он выдает полные слова в строке.

Это то, что я до сих пор:

int main()
{
int width= 15;
vector<string> line;
line.push_back("Hello");
line.push_back("My");
line.push_back("Name");
line.push_back("Is");
line.push_back("John");

auto s = line.front();
for (auto i = std::size_t {1}; i < line.size(); ++i) s += ' ' + line[i];for (size_t i = 0; i < s.length(); i+=width+1)
{
s.insert(i,"\n");
}

cout<<s;

}

Я не хочу равномерно добавлять пробелы между словами, чтобы последняя строка не получала обрезку и переместилась на следующую строку.

Это похоже на вопрос о С ++ текст полное выравнивание
но я хочу исправить свою реализацию решения этой проблемы.

-2

Решение

Что вы делаете, вы вставляете новую строку в строку после того, как она уже сформирована, таким образом, возможно, сокращая слово до новой строки.

Было бы лучше проверить, станет ли длина строки больше желаемой ширины вашей строки, если вы вставите новое слово, прежде чем добавить к нему другое слово.

Это то, что я мог придумать

int main()
{
int width= 15;
vector<string> line;
line.push_back("Hello");
line.push_back("My");
line.push_back("Name");
line.push_back("Is");
line.push_back("John");

std::string s {};
for (int i {0}; i < line.size(); ++i)
{
if( (s + line[i] + " ").size() <= width)
{
s += line[i] + " ";
}
else
{
s += "\n" + line[i] + " ";
width += width;
}
}
cout<<s;
}
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]