Печать произвольного количества разделителей заголовков в зависимости от длины сообщения - PullRequest
1 голос
/ 02 апреля 2009

Скажите, что я хочу напечатать:

============
Some message
============

И

=======================
Other Message long one
=======================

Число «=» изменяется в зависимости от длины сообщения. Какой самый эффективный способ напечатать такую ​​вещь?

Нет повышения, просто STL, пожалуйста.

Ответы [ 3 ]

7 голосов
/ 02 апреля 2009
std::string line(msg.length(), '=');
cout << line << "\n" << msg << "\n" << line << endl;
2 голосов
/ 02 апреля 2009

вариант iomanip, просто для удовольствия.

const std::string hello("hello world!");
std::cout << std::setfill('=') << std::setw( hello.length() + 1) << "\n"
          << hello << "\n";
          << std::setfill('=') << std::setw( hello.length() + 1 ) << "\n";
2 голосов
/ 02 апреля 2009

Вы не указываете, как вы измеряете «эффективность» в этом контексте. Вот одно решение, которое эффективно с точки зрения кода, который вы должны написать, и количества распределений:

#include <string>
#include <iostream>

using namespace std;

void format(const std::string& msg)
{
    std::string banner(msg.length(), '=');
    cout << banner << endl
         << msg    << endl
         << banner << endl;
}

int main(int argc, char *argv[])
{
    format("Some message");
    format("Other message long one");
    return 0;
}

Я могу представить другие альтернативы, которые не выделяют временную строку для баннеров, но могут стоить дороже самой печати.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...