首页
学习
活动
专区
圈层
工具
发布

衬砌柱
EN

Stack Overflow用户
提问于 2013-11-22 04:43:31
回答 1查看 109关注 0票数 0

解决了!

我就是这么写的:

代码语言:javascript
复制
cout << setw(4) << "Students";
cout << setw(20) << "Hours Worked";
cout << setw(20) << "of Total Hours";
cout << endl;

for (int i = 0; i < students; i++)
{
    cout << setw(20);
    cout << names[i];
    cout << setw(10) << hours[i];
    cout << setw(10) << percent[i];
    cout << endl;
}

但是,如果第一个名称是几个字符排序器或大于第二个名称,它们就会出现对齐错误。如何保持每一列对齐?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-22 05:07:15

试着做这样的事情:

代码语言:javascript
复制
#include<iostream>
#include <iomanip>   
#include<string>

using namespace std;


int main()
{
  int students = 5;
  string names[5] = {"a","bccc","c","d","ecsdfsdfasdasasf"};
  int hours[5] = {1,2,3,4,5};
  int percent[5] = {10,20,30,40,54};

  string column("Students");

  int maxStringSize = 0;
  int sizeOfStudentColumn = column.length();

  for(int i = 0; i < 5; ++i)
  {
    if(maxStringSize < names[i].length())
     maxStringSize = names[i].length();
  }

  if(sizeOfStudentColumn > maxStringSize)
    maxStringSize = sizeOfStudentColumn;

  cout<<"max size: "<<maxStringSize<<endl;

  cout << setw(4) << "Students";
  cout << setw(maxStringSize + 5) << "Hours Worked";
  cout << setw(20) << "of Total Hours";
  cout << endl;

  for (int i = 0; i < students; i++)
  {
//    cout << setw(20);
    cout << names[i];
    int diff = maxStringSize - names[i].length();
    cout << setw(diff + 5 ) << hours[i];
    cout << setw(20) << percent[i];
    cout << endl;
  }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20137168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档