首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 ><iomanip>对齐问题

<iomanip>对齐问题
EN

Stack Overflow用户
提问于 2015-11-09 19:37:48
回答 1查看 152关注 0票数 0

因此,我使用iomanip库来显示以下内容:

代码语言:javascript
复制
std::cout << std::endl
    << std::left << std::setw(15) << "Ticker Symbol"
    << std::setw(100) << "Stock Name"
    << std::setw(12) << "Value"
    << std::setw(10) << "Date"
    << std::setw(10) << "YTD Return"
    << std::endl;

问题是,它最终会打印以下内容:

代码语言:javascript
复制
T       icker SymbolS                       tock NameV      alueD       ateY    TD Return

而不是:

代码语言:javascript
复制
Ticker Symbol    Stock Name                            Value    Date    YTD Return

有什么方法可以不使用其他库来修复这个问题吗?

编辑:我的操作符重载功能似乎导致了这个问题:

代码语言:javascript
复制
std::ostream& operator<< (std::ostream& out, const char array[])
{
    for (uint8_t i = 0; array[i] != '\0'; i++)
    {
        out << array[i];
    }
    return out;
}

尽管如此,我还是不知道如何解决这个问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-09 20:55:36

你为什么要让接线员超负荷?这当然是导致你的问题的原因。

setw将被应用于流的第一件输出,而且由于c-字符串一次输出一个字母,所以setw只应用于第一个字母--生成您正在看到的行为。

最简单的方法就是摆脱操作者的过载。否则,您需要从cout.width()获得宽度,一次输出一个字母,然后在之后添加额外的空格:

代码语言:javascript
复制
std::ostream& operator<< (std::ostream& out, const char array[])
{
    int width = out.width();
    out.width(0);
    int array_size = 0;
    for (uint8_t i = 0; array[i] != '\0'; i++, array_size++)
    {
        out << array[i];
    }

    for (int i = array_size; i < width; i++)
    {
        out << " ";
    }

    return out;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33616841

复制
相关文章

相似问题

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