C ++ - Форматирование столбцов

0

Я боролся с этим последние несколько часов, но мне нужна помощь в форматировании некоторых результатов. В принципе, у меня есть двумерный массив arr который я хочу напечатать в 3 х 70 группах, т.е.

aaaaaa ... a //Columns 1-70
bbbbbb ... b //Columns 1-70
cccccc ... c //Columns 1-70
             //newline
             //newline
             //newline
aaaaaa ... a //Columns 1-70
bbbbbb ... b //Columns 1-70
cccccc ... c //Columns 1-70

//and so on like that until all of top, mid, and bot is printed out

где aaaa....a соответствует arr[0], bbbbb....b соответствует arr[1], а cccc...c соответствует arr[2].

Другая часть состоит в том, что arr соответствует трем одномерным массивам top, mid и bot. Как вы можете догадаться, aaaa...aaa - значения в top, bbbb...bbb - значения в mid, а ccc....ccc - значения в bot. Длина top, mid и bot одинакова, поэтому одна length поля была присвоена этому значению.

Мой текущий код (исключая импорт):

string alignToString;
stringstream out;

char arr[3][70];


for (int column = 1; column <= length; ++column)
{
    out << top[column - 1];
    if (column % 70 == 0)
    {
        out << endl;
        for (int column = 1; column < 70; ++column)
        {

        }
    }

    arr[0][column] = top[column - 1];
    arr[1][column] = mid[column - 1];
    arr[2][column] = bot[column - 1];

    if (column % 70 == 0)
    {
        break;
    }

//TODO: output out.str();
}

Очевидно, этот код не работает. У меня была идея, что, может быть, я могу вывести каждый столбец из трех групп, а после столбца% 70 = 0, я бы добавил новые строки, но я не могу понять, что это так. Если кто-то может помочь мне решить эту проблему или обеспечить лучшее решение этой проблемы, я был бы очень признателен. Заранее спасибо.

  • 0
    Я не имею понятия, какова роль топ, мид, бот. На самом деле я не могу понять, что вы пытаетесь сделать. Также вы не написали, что такое текущий вывод и чем он отличается от того, что вы хотите. Если вы действительно хотите получить ответ, перепишите свой вопрос.
Теги:
arrays
output
formatting

1 ответ

0

Вопрос немного неясен - для чего используется arr? Вы действительно хотите скопировать каждую строку top, в mid и bot в arr для последующего использования, а также для печати? Или это просто часть вашего решения? Если вам это не нужно для других целей, тогда нет никакой пользы при копировании данных из трех массивов с вашими данными в эти временные буферы.

Другой бит, который не является очевидным, - это то, хотите ли вы в представлении строки памяти или на самом деле печатать непосредственно в cout. Если последнее, то опять нет никакой реальной выгоды при временном письме в буфер stringstream заранее - символы будут записываться в том же порядке в любом случае.

Я предположил, что вы намереваетесь и то, и другое, но если не решение может быть сделано, чтобы работать быстрее. Говоря о скорости, хотя компиляторы улучшают оптимизацию, рабочий характер по характеру может быть очень медленным. Использование std :: ostream :: write() для получения длинных прогонов символов за раз более ясное и быстрое.

const size_t maxColumn = 70;

char arr[3][maxColumn];

using CharIteratorPair = std::pair<char *, char *>;

CharIteratorPair myArrays[] = {
    { top, arr[0] },
    { mid, arr[1] },
    { bot, arr[2] }};

std::stringstream out;

for (size_t i = 0 ; i < length; i += maxColumn) {
    size_t gulpSize = std::min(maxColumn, length - i);

    for (auto& source: myArrays) {
        out.write(source.first, gulpSize);
        out << std::endl;

        // Remove this line if you don't need to copy the data
        // into "arr"
        std::copy_n(source.first, gulpSize, source.second);

        std::advance(source.first, gulpSize);
    }   

    // "arr" has now been filled in, do other processing here for each
    // group of three rows as needed
}   

// out has now been filled in, ready for extracting with .str()
// or printing to std::cout etc.

std::cout << out.str();

Ещё вопросы

Сообщество Overcoder
Наверх
Меню