C ++ отображать текст слева и справа в одной строке - PullRequest
1 голос
/ 23 июня 2019

Я хочу вывести целую отформатированную консольную строку (80 символов) в C ++.

Это должно выглядеть так:

Some things on the left side some other on the right side

Данные содержат двафункции итератора, которые возвращают std :: string и фиксированные тексты.Примерно так:

std::cout << (*some_iterator)->getID() << " some text:" << LOTSOFSPACES << (*some_other_iterator)->getName() << " some more text.";

Результат всегда должен быть 80 символов.

Я пытался возиться с std :: setw и std :: setfill, std :: left и std :: right, используя поток строк и вычисляя пространства, которые я должен создать.Но на самом деле ничего не работает, и большинство идей просто полностью уничтожили результат.

Есть идеи?К сожалению, мне не разрешено использовать внешние библиотеки.

Ответы [ 2 ]

2 голосов
/ 23 июня 2019

Если вы можете точно сказать, что обе части всегда меньше 40 символов (или их можно разделить на два столбца любым другим способом), вы можете сделать это следующим образом:

std::string firstPart = (*some_iterator)->getID() + " some text:";
std::string secondPart = (*some_other_iterator)->getName() + " some more text.";
std::cout << std::setw(40) << std::left <<  firstPart 
          << std::setw(40) << std::right << secondPart;

См. Онлайн

Более универсальным решением было бы просто рассчитать расстояние между строками и вставить его вручную.Для этого не нужно иметь столбцы известной длины:

std::string firstPart = (*some_iterator)->getID() + " some text:";
std::string secondPart = (*some_other_iterator)->getName() + " some more text.";
std::size_t spacingSize = 80 - firstPart.length() - secondPart.length();
    //Add some code to check if spacingSize is not negative!
std::cout << firstPart << std::string(spacingSize, ' ') << secondPart;

Смотреть онлайн

0 голосов
/ 24 июня 2019

Вы можете попытаться установить курсор на позицию. Сначала вы должны добавить библиотеку:

#include <windows.h>

Теперь вы можете использовать функцию:

COORD c;
c.X = x_coordinate;
c.Y = y_coordinate;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), c);
...