假设你有类似的东西:
std::ostringstream oss;
int value(42);
oss.fill('0');
oss << std::setw(3) << value;
cout << oss.str();
输出:042
这个输出是因为 std::setw 确保了最小宽度,我们告诉流用 0 填充但是你如何做相反的事情并指定最大宽度,以便在 STL 和本机 C++ 中截断显示最好...
目前我有一些我认为是丑陋和低效的黑客:
std::ostringstream oss;
int value(1239999);
oss.fill('0');
oss << std::setw(3) << boost::lexical_cast<std::string, int>(value).substr(0, 3);
cout << oss.str();
输出:123
我看过 boost::format 但据我所知,这是同一个故事,没有办法“漂亮”地做到这一点......有什么建议吗?
更新:与 STL 的其他容器和模板对象相比,通常已知 std::ostringstream 和 STL 流执行缓慢。也许我最好制作一个包装并在内部使用 std::queue 的消息队列对象,然后只使用 sprintf_s 进行格式化?