有什么方法可以将此功能分开并插入空间



假设我需要以以下格式输出屏幕地址(地址的每一行通过与太空字符进行前缀对齐):

地址:1234 Elm St.         公寓#2后方         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;
};

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

地址:1234 Elm St.公寓#2后方Anytown,NV 12345-6789

我想知道是否有可能以某种方式将功能分开,以将这些空间插入第二和第三行,并使一切都排成一列。有任何想法吗?还是不可能?

您可以重定向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功能的设计简单。

最新更新