有没有办法将此功能拆分并插入空格?

时间:2017-11-26 23:27:39

标签: c++ c++11

假设我需要以下列格式向屏幕输出一个地址(地址的每一行都用空格字符前缀对齐):

Address: 1234 Elm St.    
         Apartment # 2 Rear  
         Anytown, NV 12345-6789 

这是一些示例代码,它定义了一个将地址打印到屏幕的自由函数(printAddress)。我无法以任何方式更改printAddress函数的代码。

#include <iostream>
#include <iomanip>

using namespace std;

void printAddress( );

int main( )
{

    cout << "Address: ";
    printAddress ( );

    return 0;
}

void printAddress( ) 
{
    cout << "1234 Elm St." << endl;
    cout << "Apartment #2 Rear" << endl;
    cout << "Anytown, NV 12345-6789" << endl;
};

截至目前,此代码的输出为:

Address: 1234 Elm St.  
Apartment #2 Rear  
Anytown, NV 12345-6789  

我想知道是否有可能以某种方式将功能分开以在第二和第三行插入这些空格并使所有内容排成一行。有任何想法吗?或者这不可能吗?

1 个答案:

答案 0 :(得分:1)

您可以重定向std::cout,重新编写邮件,然后将其重新发布到(真实)std::cout。像(尚未测试)的东西:

ostringstream oss;
auto oldcoutbuf = cout.rdbuf(oss.rdbuf());
printAddress();
string s = oss.str();
s = indentMsg(s);
cout.rdbuf(oldcoutbuf);
cout << "Address: " << s;

(可能被称为“严重 可怕 让事情发生的事情。”

printAddress功能设计得非常糟糕。