Как выровнять абзац вправо в c ++? - PullRequest
0 голосов
/ 25 апреля 2020

Например, этот текст станет:

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

Спасибо за помощь!

1 Ответ

2 голосов
/ 25 апреля 2020

Прежде всего, я рекомендую вам использовать range-base for l oop для итерации по вашему вектору.

Во-вторых, все, что вам нужно для вывода вправо выровнено по установите ширину поля равной размеру самой длинной строки и сделайте все выходные данные выровненными по правому краю :

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

Обратите внимание, что для этого не требуется вы должны дополнить каждую строку, на самом деле это требует, чтобы вы этого не делали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...