Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 通过ostringstream格式化时,字符串和整数/浮点数可以混合使用吗_C++_Printf_Ostringstream - Fatal编程技术网

C++ 通过ostringstream格式化时,字符串和整数/浮点数可以混合使用吗

C++ 通过ostringstream格式化时,字符串和整数/浮点数可以混合使用吗,c++,printf,ostringstream,C++,Printf,Ostringstream,我试图完全理解如何使用ostringstream使一些使用sprintf的代码现代化。问题在于替换生成随机或顺序数据的测试代码。下面是一个简化的示例: char num[6], name[26]; sprintf(num, "%05d", i); sprintf(name, "Customer # %d", i); 撇开长度计算的细节不谈,将结果复制到数组和空终止,num转换非常简单: ostringstream ostr; ostr <<

我试图完全理解如何使用
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
的相同值,结果总是“Customer#123”,即无论
left
right
internal
的组合是什么,也不管各个部分的位置如何,整数总是右对齐。似乎唯一的解决方案(我还没有尝试过)是首先将“Customer#”和
I
连接到一个单独的
ostringstream
上,然后将左对齐插入
ostr
变量。我错过什么了吗?还有别的办法吗



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

setw的目的是什么?它与相应的
sprintf
call.IO修改器中的任何内容都不对应,例如
std::setw
仅适用于调用
operator@SamVarshavchik恐怕我简化得太多了。实际代码对名称执行两个sprintf,一个如图所示,另一个用空格填充,即类似于
sprintf(name+strlen(name),“%*.s”,len-strlen(name),”)
ostringstream
对于复杂的格式设置并不方便,请尝试一下很棒的
fmt
库基于Sam和Brian的上述评论以及我发现使用了第二个sprintf,我猜所需的格式可以实现如下:
ostr
ostr << setw(len) << left << "Customer # " << i << setfill(' ');