【问题标题】:Right justify two variables in C++ (I want to treat them as one variable)右对齐 C++ 中的两个变量(我想将它们视为一个变量)
【发布时间】:2017-04-26 03:48:12
【问题描述】:

假设我有一个 char 变量和一个整数变量。我想在输出它们时将它们视为一个变量(例如:B6、A2、C10 等)

我想在 4 个空格的位置右对齐这两个变量,但我终生无法弄清楚如何做到这一点。 (我想要下划线为空格的 _A10 和 __A6)

在 C++ 中可以做到这一点吗?

【问题讨论】:

  • 我的解决方案是在输出变量和空格之前创建一个 if 语句并检查整数变量是否 >= 10,但这会使代码难以阅读。我想知道是否有 iomanip 解决方案
  • 当您意识到计算机必须做什么时,这些类型的问题会变得更容易回答。由于是从左到右打印,所以打印__A6意味着它需要在A之前打印两个空格,然后是一个6。关键字是before。在开始打印空格字符之前,您必须知道要打印的最后一个变量。
  • MSalters,如果您查看我的评论,我已经提到了这一点,并讨论了我自己的解决方法(如果整数变量可以是 3 位或 4 位等,这将更加乏味)。但是,我已经从其他 cmets 那里得到了一个 iomanip 解决方案,尽管我仍然不确定您的评论的目的是什么。

标签: c++ iomanip setw


【解决方案1】:

这是一个没有 Boost 依赖的解决方案。将整数转换为字符串,与字符连接,并使用std::setw 设置流宽度。例如:

#include <iostream>
#include <iomanip>
int main(void)
{
    char a = 'A', b = 'B';
    int ai = 10, bi = 6;
    std::cout << std::setw(4) << (a + std::to_string(ai)) << std::endl;
    std::cout << std::setw(4) << (b + std::to_string(bi)) << std::endl;
}

在我的机器上打印:

 A10
  B6

【讨论】:

  • 感谢 bnaecker - 非常有创意的解决方案。我必须#include ,但效果很好。
【解决方案2】:

使用 Boost.Format 将 printf 样式的格式应用于 C++ 流。

#include <iostream>
#include <string>
#include <boost/format.hpp>

int main()
{
  char c = 'A';
  int i = 10;
  std::cout << boost::format("|%4s|") % (c + std::to_string(i)) << '\n';
}

输出:

| A10|

【讨论】:

  • 不需要boost,只要按照你显示的先加入列名和行名,使用std::rightstd::setw即可完成对正,如stackoverflow.com/q/5201619/103167所示跨度>
  • 谢谢你们。 Ben,你说得对,我不需要对 Henri 的解决方案进行提升,但我很高兴我被介绍给它,以防我将来需要它。
猜你喜欢
  • 1970-01-01
  • 2019-05-01
  • 1970-01-01
  • 2016-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-18
  • 1970-01-01
相关资源
最近更新 更多