ostream:前缀带空格的正数

J.K*_*eck 7 c++

在C中,空格可以包含在printf格式化标志中,这导致正数以空格为前缀.这是用于对齐有符号值的有用功能.我无法弄清楚如何在C++中做同样的事情.在C:

double d = 1.2;
printf("%f\n",d);
printf("%+f\n",d);
printf("% f\n",d);
Run Code Online (Sandbox Code Playgroud)

生产:

1.2
+1.2
 1.2
Run Code Online (Sandbox Code Playgroud)

使用ostream,我可以做前两个,但我怎么做第三个?

int d = 1.2;
std::cout << d << std::endl;
std::cout << std::showpos << d << std::endl;
// ??????????????
Run Code Online (Sandbox Code Playgroud)

编辑:关于我是否只想用空格为我的所有值加上前缀似乎有些混乱.我只想用一个空格前缀正值,类似于a)像printf空格标志那样,b)类似于showpos所做的,除了空格而不是'+'.例如:

printf("%f\n", 1.2);
printf("%f\n", -1.2);
printf("% f\n", 1.2);
printf("% f\n", -1.2);

1.2
-1.2
 1.2
-1.2
Run Code Online (Sandbox Code Playgroud)

请注意,第三个值以空格为前缀,而第四个(负)值不是.

das*_*ght 6

你可以使用setfillsetw,像这样:

cout << setw(4) << setfill(' ') << 1.2 << endl;
cout << setw(4) << setfill(' ') << -1.2 << endl;
Run Code Online (Sandbox Code Playgroud)

这会产生以下输出:

 1.2
-1.2
Run Code Online (Sandbox Code Playgroud)

不要忘记包含<iomanip>以便编译(链接到ideone).


And*_*rew 1

std::cout << " " << my_value;
Run Code Online (Sandbox Code Playgroud)

如果您只需要积极的空间:

if (my_value >=0 ) cout << " "; cout << my_value;
Run Code Online (Sandbox Code Playgroud)