根据邮件长度打印自定义数量的标头分隔符

时间:2009-04-01 21:03:28

标签: c++ stl

说我要打印:

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

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

“=”的数量根据消息长度而变化。打印这种东西最有效的方法是什么?

没有提升,请STL。

3 个答案:

答案 0 :(得分:7)

std::string line(msg.length(), '=');
cout << line << "\n" << msg << "\n" << line << endl;

答案 1 :(得分:2)

在此上下文中,您未指定测量“效率”的方式。这是一个在您必须编写的代码和分配数量方面有效的解决方案:

#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;
}

我可以设想避免为横幅分配临时字符串的其他替代方案,但这些可能会增加实际打印的成本。

答案 2 :(得分:2)

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";