假设我需要以以下格式输出屏幕地址(地址的每一行通过与太空字符进行前缀对齐):
地址: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
功能的设计简单。