首页 > 解决方案 > 通过 ostringstream 格式化时可以混合字符串和整数/浮点数吗

问题描述

我试图完全理解如何使用ostringstream来现代化一些使用sprintf. 问题在于替换生成随机或顺序数据的测试代码。这是一个简化的示例:

char num[6], name[26];
sprintf(num, "%05d", i);
sprintf(name, "Customer # %d", i);

撇开长度计算的细节不谈,将结果复制到数组和空终止,num转换很简单:

ostringstream ostr;
ostr << setw(len) << setfill('0') << i;

例如,给定i为 123,结果为“00123”。然而,对于name实际上是一个字符字符串和一个整数的混合,我不知道如何复制sprintf看起来如此容易的东西。我尝试了这种变化:

ostr << setw(len) << left << "Customer # " << i << setfill(' ');

给定相同的 值i,结果始终为“Customer # 123”,即整数始终右对齐,无论leftrightinternal或各个部分的位置如何组合。似乎唯一的解决方案(我还没有尝试过)是首先将“客户#”和 连接i到一个单独的ostringstream然后将对齐的变量插入到ostr变量中。我错过了什么吗?还有其他方法吗?


更正:正如评论中所讨论的,在简化示例时,我忽略了sprintf实际上负责填充名称的第二个。ostringsteam因此,还需要第二个输出来实现这一点。

标签: c++printfostringstream

解决方案


推荐阅读