如何以不切断单词(字符串)的方式将我的代码设置为 运行?

How do I get my code to run in a way that won't cut off the words(strings)?

这个程序的目标应该是产生一个输出字符串:

  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;

}

我不想在单词之间均匀地添加空格,这样最后一个字符串就不会被截断并移动到下一行。

这类似于C++ text full justification的问题 但我想更正我自己的实现来解决这个问题。

您正在做的是在字符串已经形成后将新行插入到字符串中,因此可能会将一个词剪切到新行。

如果您在添加另一个词之前插入一个新词,最好检查字符串的长度是否会变得大于您的行的所需宽度。

这是我能想到的

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;
}