c++ 将cout格式与表的列对齐

svmlkihl  于 2023-04-22  发布在  其他
关注(0)|答案(5)|浏览(194)

我很确定这是一个关于格式的简单问题,但这是我想要完成的:
我想使用cout将数据输出到屏幕上。我想以表格格式输出。我的意思是列和行应该正确对齐。示例:

Test                 1
Test2                2
Iamlongverylongblah  2
Etc                  1

我只关心个别行,所以我现在要输出的行(不工作)是
cout << var1 << "\t\t" << var2 << endl;
这给了我这样的东西:

Test                 1
Test2                  2
Iamlongverylongblah         2
Etc                  1
rt4zxlrg

rt4zxlrg1#

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;
}
ttygqcqt

ttygqcqt2#

我建议使用Boost Format。使用类似这样的代码:

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

jvidinwx3#

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

muk1a3rh

muk1a3rh4#

您可能需要使用std::format
使用对齐语法"{:<30} | {:<30}\n"。这使您可以使用具有特定宽度的对齐来格式化文本。
要格式化一个表,你可以在std:string table_rows后面加上一个字符串,然后用对齐和宽度来格式化元素,如下所示:
table_rows += format("{:<32} | {:<30}\n", str_col_1, str_col_2);
对于调试,一些填充字符可能会很方便,您可以像这样设置:format("{:*<32} | {:+<30}\n" ... .
如果您确实需要使用动态宽度,那么请确定最长的“str_col_1”并将其用作另一个参数来格式化:
std::format("{:<{}}", "left aligned", 30);
示例:

#include <iostream>
#include <string>
#include <fmt/format.h>

int main()
{
    std::string table_rows;
    std::string str_col_1[] = {"Name", "Age", "Gender", "City"};
    std::string str_col_2[] = {"John", "25", "Male", "New York"};

    for (int i = 0; i < 4; i++) {
        table_rows += fmt::format("{:<10} | {:<15}\n", str_col_1[i], str_col_2[i]);
    }

    std::cout << table_rows << "\n";

    return 0;
}

输出:

Name       | John           
Age        | 25             
Gender     | Male           
City       | New York

参考:
https://en.cppreference.com/w/cpp/utility/format/formatterhttps://fmt.dev/latest/syntax.html

9lowa7mx

9lowa7mx5#

你可以用

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

相关问题