C ++在同一行中左右显示文本

时间:2019-06-23 19:54:15

标签: c++ formatting cout

我想用C ++输出整个格式化的控制台行(80个字符)。

它应该像这样:

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,使用stringstream并计算必须创建的空间。但是什么都没有真正起作用,大多数想法只是完全破坏了输出。

有什么想法吗?不幸的是,我不允许使用外部库。

2 个答案:

答案 0 :(得分:2)

如果您可以确定两个部分始终少于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;

See it online

更通用的解决方案是简单地计算字符串之间的间距并手动插入。这不需要具有已知长度的列:

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;

See it online

答案 1 :(得分:0)

您可以尝试将光标设置在该位置。 首先,您必须添加库:

#include <windows.h>

现在您可以使用功能:

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