如何让我的代码以不会切断单词(字符串)的方式运行?

时间:2016-03-18 15:40:46

标签: c++ procedural-programming

该程序的目标应该是生成一个输出字符串,以便:

  1. 输出字符串 + 之间的空格==宽度。
  2. 字符串被截断。所以,它每行都给出完整的单词。
  3. 这是我到目前为止所做的:

    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的问题 但我想纠正自己的实现以解决此问题。

1 个答案:

答案 0 :(得分:3)

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

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

这就是我能想到的

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