【问题标题】:How can I print this perfecly aligned in c++? [closed]如何在 C++ 中打印完美对齐? [关闭]
【发布时间】:2020-11-03 20:44:17
【问题描述】:

如何打印这段代码,只需要足够的空间来组织输出?我试过/t 没用。我尝试使用" " 手动添加空格,但由于结果会根据给定的输入而变化,我无法完美地对齐它。

如果您能提供帮助,我将不胜感激,谢谢! (代码是c++)

【问题讨论】:

  • 你能想出一条规则告诉你要使用多少空间吗?
  • 如果您使用std::cout 打印,std::setw 会有所帮助。查找重复项。
  • 您当前的代码是什么样的(请相应地编辑您的问题)?您正在打印的“数字”,它们真的是数字吗,它们是字符串吗?...?
  • 嗨,欢迎来到 StackOverflow :) 我们不会在这个网站上为你编写整个程序。相反,您需要自己尝试,并就您遇到困难的某个部分提出一个具体的问题。请使用tour 并查看How to Ask。此外,您将获得参加游览的徽章:)

标签: c++ c++14 c++17


【解决方案1】:

我猜你正在使用“std::cout”来打印数字。如果是,您可以在打印数字之前指定一些格式细节。你有更多的细节here

在你的情况下,我会尝试这样的事情:

#include <iostream>
#include <iomanip>

int main(){
    double l11 = 6, l12 = 403.429, l13 = 1.79146, l14 = 2.44949;
    double l21 = 9, l22 = 8103.08, l23 = 2.19722, l24 = 3;
    double l41 = 15, l42 = 3.26902e+06, l43 = 2.70805, l44 = 3.87298;

    std::cout << std::setfill(' ') << std::setw(3) << l11 << " ";
    std::cout << std::setfill(' ') << std::setw(15) << l12 << " ";
    std::cout << std::setfill(' ') << std::setw(15) << l13 << " ";
    std::cout << std::setfill(' ') << std::setw(15) << l14 << std::endl;

    std::cout << std::setfill(' ') << std::setw(3) << l21 << " ";
    std::cout << std::setfill(' ') << std::setw(15) << l22 << " ";
    std::cout << std::setfill(' ') << std::setw(15) << l23 << " ";
    std::cout << std::setfill(' ') << std::setw(15) << l24 << std::endl;

    std::cout << std::setfill(' ') << std::setw(3) << l41 << " ";
    std::cout << std::setfill(' ') << std::setw(15) << l42 << " ";
    std::cout << std::setfill(' ') << std::setw(15) << l43 << " ";
    std::cout << std::setfill(' ') << std::setw(15) << l44 << std::endl;
}

这会给你这个结果:

  6         403.429         1.79146         2.44949
  9         8103.08         2.19722               3
 15     3.26902e+06         2.70805         3.87298

【讨论】:

    【解决方案2】:

    如何在 c++ 中打印这个完全对齐的?

    您可以使用以下算法:遍历每一行和每一列并计算每个单元格的宽度。保留每列中最宽单元格的计数。现在您知道每列的宽度,再次遍历数据,打印值并将每个单元格填充到该宽度。

    算法很简单,但需要花点功夫才能正确实现,所以要彻底测试。

    您的数据似乎是数字,所以这应该不是问题,但总的来说:如果您想支持 Unicode,计算字符串的宽度实际上是相当棘手的。这不仅是因为一个显示“字符”可能由多个字素组成,每个字素可能由多个代码点组成,每个代码点可能由多个代码单元组成(代码单元是 C++ 中的“字符”类型)......但是也因为这些字符的宽度可能比固定宽度字体的单列宽。 C++ 标准几乎不支持 Unicode。 POSIX 标准有 wcswidth 就是为了这个目的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-30
      相关资源
      最近更新 更多