2014-01-11 57 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++流,你可以寫你自己的格式修改。