Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.12.2011, 23:25   #1
vova287
 
Регистрация: 08.11.2010
Сообщений: 9
По умолчанию Текст загнать в таблицу

Доброе время суток написал программу, а вывод хочу что бы делался табличкой но с псевдографикой не дружу подскажите что надо сделать что б данный текст выводился как на фото
Код:
printf("\n|Student| Fakultet  |Grupa| Kurs | Res  |\n"); cout << endl; 
cout << data[i].fio << data[i].fakultet << data[i].grupa << data[i].kurs << data[i].bal;
Изображения
Тип файла: jpg 1.JPG (11.7 Кб, 37 просмотров)
vova287 вне форума Ответить с цитированием
Старый 02.12.2011, 00:23   #2
_Ч_
Форумчанин
 
Регистрация: 07.01.2010
Сообщений: 141
По умолчанию

можно попробовать в нужные места подставлять нужные символы.
распечатайте всю таблицу символов от 0 до 255 с их индексами и увидите, какие вам подходят. потом можно будет правильно формировать строки с нужными символами в нужным местах. ну и выводить эти строки обычным std::cout << line << std::endl;
_Ч_ вне форума Ответить с цитированием
Старый 02.12.2011, 00:34   #3
vova287
 
Регистрация: 08.11.2010
Сообщений: 9
По умолчанию

а нельзя это каким то масивчиком или функцией записать что бы не я прописывал каждый символ а прога автоматически ?
vova287 вне форума Ответить с цитированием
Старый 02.12.2011, 00:42   #4
_Ч_
Форумчанин
 
Регистрация: 07.01.2010
Сообщений: 141
По умолчанию

можно написать специальный класс Table, в него динамически добавлять колонки с заголовком и списком строковых значений. Ну и написать в этой таблице специальную ф-ию печати, которая бы учитывала все имеющиеся колонки, их ширину и т.п. и правильно бы распечатыала табличку. Чегото более простого я не знаю.
_Ч_ вне форума Ответить с цитированием
Старый 02.12.2011, 00:50   #5
vova287
 
Регистрация: 08.11.2010
Сообщений: 9
По умолчанию

ооо жесть буду пробовать с анси таблицу, но не думаю что то хорошее из этого выйдет
vova287 вне форума Ответить с цитированием
Старый 02.12.2011, 01:45   #6
_Ч_
Форумчанин
 
Регистрация: 07.01.2010
Сообщений: 141
По умолчанию

не все так страшно. вот я накидал примерчик. не совсем то, что вам нужно, но если допилите - будет как на картинке

Код:
#include <algorithm>
#include <iostream>
#include <vector>
#include <string>
#include <list>

struct Column
{
  typedef std::vector<std::string> Values;

  std::string title;
  Values values;
};
typedef std::list<Column> ColumnsList;

bool StringLessByLength(const std::string& lhs, const std::string& rhs)
{
  return lhs.length() < rhs.length();
}

bool StringLessByValuesCount(const Column& lhs, const Column& rhs)
{
  return lhs.values.size() < rhs.values.size();
}

std::size_t GetColumnWidth(const Column& column)
{
  Column::Values::const_iterator maxLengthStr = std::max_element(column.values.begin(), column.values.end(), &StringLessByLength);
  return std::max(maxLengthStr->length(), column.title.length());
}

void PrintTable(const ColumnsList& columns, std::ostream& out)
{
  std::vector<std::size_t> columnWidths;
  std::transform(columns.begin(), columns.end(), std::back_inserter(columnWidths), &GetColumnWidth);

  { // Печатаем ячейки татлов
    std::string tableLine;
    ColumnsList::const_iterator columnIter = columns.begin();
    for (unsigned i = 0; i < columns.size(); ++i, ++columnIter)
    {
      const size_t columnWidth = columnWidths[i];
      const Column& column = *columnIter;
      std::string cell(columnWidth + 2, ' ');
      cell[0] = char(179);
      if (i == columns.size() - 1)
      {
        cell[cell.length() - 1] = char(179);
      }
      cell.replace(1, column.title.length(), column.title);
      tableLine += cell;
    }
    out << tableLine << std::endl;
  }

  { // Печатаем ячейки значений
    const size_t maxLines = std::max_element(columns.begin(), columns.end(),
      &StringLessByValuesCount)->values.size();
    for (size_t line = 0; line < maxLines; ++line)
    {
      std::string tableLine;
      ColumnsList::const_iterator columnIter = columns.begin();
      for (unsigned i = 0; i < columns.size(); ++i, ++columnIter)
      {
        const size_t columnWidth = columnWidths[i];
        const Column& column = *columnIter;
        std::string cell(columnWidth + 2, ' ');
        cell[0] = char(179);
        if (i == columns.size() - 1)
        {
          cell[cell.length() - 1] = char(179);
        }
        if (column.values.size() > line)
        {
          const std::string& value = column.values[line];
          cell.replace(1, value.length(), value);
        }
        tableLine += cell;
      }
      out << tableLine << std::endl;
    }
  }
}

int main()
{
  Column firstColumn;
  firstColumn.title = "First";
  firstColumn.values.push_back("value 1");
  firstColumn.values.push_back("value 1");
  firstColumn.values.push_back("value 1");

  Column secondColumn;
  secondColumn.title = "Second";
  secondColumn.values.push_back("value 2333");
  secondColumn.values.push_back("value 2333");
  secondColumn.values.push_back("value 2333");

  Column thirdColumn;
  thirdColumn.title = "Third";
  thirdColumn.values.push_back("value 3");
  thirdColumn.values.push_back("value 3");
  thirdColumn.values.push_back("xxx");
  thirdColumn.values.push_back("yyy");
  thirdColumn.values.push_back("adfsfadsfa");
  thirdColumn.values.push_back("rrrrr");

  Column oneMoreColumn;
  oneMoreColumn.title = "Third";
  oneMoreColumn.values.push_back("d");
  oneMoreColumn.values.push_back("1");
  oneMoreColumn.values.push_back("2");

  ColumnsList columns;
  columns.push_back(firstColumn);
  columns.push_back(secondColumn);
  columns.push_back(thirdColumn);
  columns.push_back(oneMoreColumn);

  PrintTable(columns, std::cout);

  return 0;
}
_Ч_ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Некорректно копируется текст в таблицу(Word) Rewind Microsoft Office Word 1 13.06.2011 05:30
Символы в строке загнать в переменные cheef Общие вопросы Delphi 5 26.06.2010 16:49
C++ Загнать массив в файл Blu2th Помощь студентам 0 08.04.2010 14:28
Можно ли как-нибудь загнать текст "x+3" в функцию? TwiX Общие вопросы Delphi 13 02.11.2009 18:49
Загнать в TStringlist текст Polotenchik Общие вопросы Delphi 3 31.07.2009 00:02