【问题标题】:Align cout format as table's columns将 cout 格式对齐为表格的列
【发布时间】:2008-11-09 01:40:20
【问题描述】:

我很确定这是一个关于格式的简单问题,但这是我想要完成的:

我想使用cout 将数据输出到屏幕上。我想以表格格式输出它。我的意思是列和行应该正确对齐。示例:

Test                 1
Test2                2
Iamlongverylongblah  2
Etc                  1

我只关心单独的行,所以我现在要输出的行(不工作)是

cout << var1 << "\t\t" << var2 << endl;

这给了我类似的东西:

Test                 1
Test2                  2
Iamlongverylongblah         2
Etc                  1

【问题讨论】:

    标签: c++ string format


    【解决方案1】:

    setw.

    #include <iostream>
    #include <iomanip>
    using namespace std;
    
    int main () {
      cout << setw(21) << left << "Test"    << 1 << endl;
      cout << setw(21) << left << "Test2"   << 2 << endl;
      cout << setw(21) << left << "Iamlongverylongblah"     << 2 << endl;
      cout << setw(21) << left << "Etc"     << 1 << endl;
      return 0;
    }
    

    【讨论】:

    • 您忘记添加“
    • std::left 不会在每个格式化输出上重置,您只需要一次。 (流的宽度重置。)
    【解决方案2】:

    我建议使用Boost Format。使用这样的东西:

    cout << format("%|1$30| %2%") % var1 % var2;
    

    【讨论】:

      【解决方案3】:

      您必须找到第一列中最长字符串的长度。然后,您需要在字段的第一列中输出每个字符串,长度为该最长字符串的长度。这必然意味着在你读完每一个字符串之前你不能写任何东西。

      【讨论】:

      • 没有更简单的方法吗?使用 setw 什么的。
      • >没有更简单的方法吗?除非你能预测未来。 >使用 setw 什么的。是的,setw 是一种“输出字段中第一列中的每个字符串,长度为最长字符串的长度”的一种方法。
      • 我见过的大多数格式化输出都不会费心找到一个字段的最大大小,如果它超出了一个不错的值,哦,好吧,但是格式化看起来有点奇怪。
      【解决方案4】:

      你可以用

      string str = "somthing";
      printf ("%10s",str);
      printf ("%10s\n",str);
      printf ("%10s",str);
      printf ("%10s\n",str);
      

      【讨论】:

      • 他肯定已经知道使用“printf”可以做到。他特别要求“cout”。
      • 你怎么知道他(OP)知道什么? OP 从未说过他尝试过 printf,也没有说他只想要基于 cout 的答案 (-(-1))。
      • cout 在标题中,他们写道:“我想使用 cout 将数据输出到屏幕上”
      猜你喜欢
      • 1970-01-01
      • 2013-06-22
      • 2017-01-23
      • 2014-12-11
      • 2021-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-07
      相关资源
      最近更新 更多