Целью этой программы должно быть создание выходной строки, такой что:
Это то, что я до сих пор:
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;
}
Я не хочу равномерно добавлять пробелы между словами, чтобы последняя строка не получала обрезку и переместилась на следующую строку.
Это похоже на вопрос о С ++ текст полное выравнивание
но я хочу исправить свою реализацию решения этой проблемы.
Что вы делаете, вы вставляете новую строку в строку после того, как она уже сформирована, таким образом, возможно, сокращая слово до новой строки.
Было бы лучше проверить, станет ли длина строки больше желаемой ширины вашей строки, если вы вставите новое слово, прежде чем добавить к нему другое слово.
Это то, что я мог придумать
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;
}
Других решений пока нет …