雷达智富

首页 > 内容 > 程序笔记 > 正文

程序笔记

C++中std::cout如何使输出内容对齐

2024-06-25 45

需求描述

在C++中,使用std::cout输出一些内容,需要每一行的某些内容能够对齐,并且占的宽度一致,比如输出一个类似表格的内容时,想要每一列都对齐,可以使用std::cout的格式控制来实现。
比如,以下代码中,需要将myHumen输出为一个三行四列,并且每列能对齐的内容。

#include iostream
#include iomanip
using namespace std;

struct Human {
    char name[20];
    char name2[20];
    char name3[20];
    double pts;
};

int main() {
    int i;
    Human myHumen[3] = {
        {Mr, Alan, Turing, 12.25},
        {Ms, Ada, Lovelace, 15.25},
        {Sir,  Edgar Allan, Poe, 45.25}
    };
    cout  Name1  Name2  Name3  Rating endl;
    cout  -----------------------------------------------------------------------\n;
    for(i = 0; i  3; i++) {
        cout  myHumen[i].name  myHumen[i].name2  myHumen[i].name3  myHumen[i].pts  endl;
    }//this didnt do nice printouts, with leftalign for text and rightalign with numbers
}

实现方法

std::cout的内容宽度和对齐配置,可以用如下方式实现:

cout  std::left   std::setw(30)  This is left aligned
        std::right  std::setw(30)  This is right aligned;

所以,前文的代码可以修改如下:

   cout  std::left    setw(8)   Name1  std::left     setw(12)  Name2  std::left    setw(10)  Name3   std::left    setw(10)  Rating endl;
    cout  -----------------------------------------------------------------------\n;
    for(i = 0; i  3; i++) {
        cout  std::left    setw(8)   myHumen[i].name  std::left    setw(22)  myHumen[i].name2  std::left    setw(22)  myHumen[i].name3  std::left    setw(20)  myHumen[i].pts  endl;
    }//this didnt do nice printouts, with leftalign for text and rightalign with numbers

以上修改后的代码运行结果如下:

Name1   Name2       Name3     Rating
Mr      Alan        Turing    12.25
Ms      Ada         Lovelace  15.25
Sir     Edgar Allan Poe       45.25
更新于:4个月前
赞一波!2

文章评论

评论问答