0

だから私はこれを計算するためにiomanipライブラリを使用しています:

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;

問題は、これを印刷してしまうことです:

T       icker SymbolS                       tock NameV      alueD       ateY    TD Return

それ以外の:

Ticker Symbol    Stock Name                            Value    Date    YTD Return

別のライブラリを使用せずにこれを修正する方法はありますか?

編集:私のオペレーターのオーバーロード機能がこの問題を引き起こしているようです:

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

そうは言っても、この問題を修正する方法はまだわかりません。

4

1 に答える 1

0

なぜ演算子をオーバーロードする必要があるのですか? それは確かにあなたの問題を引き起こしているものです.

setwストリームへの最初の出力に適用されます。c-strings は一度に 1 文字ずつ出力setwされるため、最初の文字のみに適用され、表示されている動作が生成されます。

最も簡単な方法は、オペレーターの過負荷を取り除くことです。それ以外の場合は、 から幅を取得しcout.width()、一度に 1 文字ずつ出力してから、余分なスペースを追加する必要があります。

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;
}
于 2015-11-09T20:55:36.987 に答える