コード例 #1
0
ファイル: unixls-00400.cpp プロジェクト: manish-kumar1/uva
void format(const multiset<string> &input, const size_t n) {
    static const string label(60, '-');
    size_t maxLen = max_element(begin(input), end(input), maxLength)->size();
    size_t columnSize = maxLen + 2;
    size_t maxCols = 0, maxRows = 0;
    for (int l = maxLen; l <= 60; l += (2+maxLen), ++maxCols);
    maxRows = n/maxCols;
    if (n % maxCols != 0) ++maxRows;

//    copy(input.begin(), input.end(), ostream_iterator<string>(cout, "\n"));   
//    cout << "log: " << maxRows << ", " << maxCols << ", " << maxLen << ", " << n << endl;
    vector<stringstream> table(maxRows);
    size_t i = 0;
    multiset<string>::const_iterator it = input.cbegin();
    for (i = 0; i < maxRows; ++i, ++it) {
        table[i] << (*it);
    }
    for (size_t c = 0; it != input.cend(); ++it, ++i) {
        if (i == maxRows) { i = 0; c++; }
        if (c != maxCols) {
//            cout << "xxx " << table[i].gcount() << ",,," << table[i].str().size() << endl;
            for (size_t sp = c*(maxLen + 2) - table[i].str().size(); sp > 0; --sp) table[i] << ' ';
        }
        table[i] << *it;
        if (c == maxCols-1) {
            for (size_t sp = maxCols*maxLen + (maxCols-1)*2 - table[i].str().size(); sp > 0; --sp) { table[i] << ' '; }
        }
    }
    
    cout << label << endl;
    for_each(table.begin(), table.end(), [](stringstream &s) { cout << s.str() << endl; });

}