首页 > 解决方案 > 如何在c ++中将段落向右对齐?

问题描述

例如,此文本将变为:

lui Andino ii place
mult informatica si doreste
sa mearga la olimpiada
pentru a-si dovedi calitatile de mare informatician
                                lui Andino ii place
                        mult informatica si doreste
                             sa mearga la olimpiada
pentru a-si dovedi calitatile de mare informatician

我的想法是找到文本行的最长大小(在我的代码中命名为 maxx),并在其他行中添加“maxx - 文本行的大小”空格。

例如:

I eat.
I eat everyday at 5 pm in the morning.

我将在前面放置“第二行文本的大小减去第一行文本”的空格。

这是我到现在为止所做的。

        cin >> t ///t is the number of line of text
        int maxx = 0, t1 = t, k = 0;
        vector<string> str;
        while(t--)
        {
            string s;
            getline(cin, s);
            str.push_back(s);


            if (s.size() > maxx)
                maxx = s.size();
        }
        for (int j = 0 ; j < t1; j++)
        {
            if (str[i].length() < maxx)
            {
                str[i].insert(0, ' ', maxx - str[i].length());
            }
            cout << str[i] << "\n";
        }

一切正常,除非我的输出中的某些行充满了未知字符。

这是程序编译的内容:

                                                lui Andino ii place
mult informatica si doreste
sa mearga la olimpiada
pentru a-si dovedi calitatile de mare informatician

谢谢你帮助我!

标签: c++stringvectortext

解决方案


首先,我建议您使用基于范围的for循环来迭代您的向量。

其次,输出右对齐所需的只是将字段宽度设置为最长字符串的大小,并使所有输出右对齐

for (auto const& s : str)
{
    std::cout << std::setw(maxx) << std::right << s << '\n';
}

请注意,这并不要求您填充每个字符串,实际上它要求您不要这样做。


推荐阅读