2014-01-11 28 views
0

是否有可能仅使用sprintf(C++)格式化负整数/双数据的方式,使符号和值之间有空格?使用sprintf格式负整数/双

from this: -1234 

to this: - 1234 

编辑:它将进入一个字符数组。

+0

纯粹出于好奇,为什么你要这个格式?有些国家是否在数字前用空格格式化负数? – Bojangles

+0

这个文档很清楚你可以做什么,不能做什么... http://www.cplusplus.com/reference/cstdio/printf/ –

+0

@Bojangles:我已经看到了一些报告,带符号的正数和负数。 –

回答

0

我意识到,这不是问题,但由于这是标记为C++:

std::ostringstream out; 
out << std::internal << std::setw(6) << -1234; 
std::string result = out.str(); 
+0

它做得非常好!谢谢! – bevolasko

0

With sprintfNot directly, no

您需要自己实现这个逻辑(使用abs/fabs和第二sprintf参数),或使用适当的区域设置谁使用这种渲染布局,并希望您的实现通过其遵守的国家。

使用C++自己的I/O流可能会更容易,所以请考虑切换到那些。

0

试试这个:

char large_evil_array[128]; 
double my_var = -12.34; 
int my_int = -6589; 
int chars_formatted = 
    snprintf(large_evil_array, sizeof(large_evil_array), 
      "%c %5.2f %c %d\n", 
       (char)((my_var < 0) ? '-' : ' '), 
       (double)((my_var < 0) ? (my_var * -1.0) : my_var), 
       (char)((my_int < 0) ? '-' : ' '), 
       (int)((my_int < 0) ? (-1 * my_int) : my_int)); 

如果您使用C++流,你可以写你自己的格式修改。