如何使用<<!-使用ofstream为减号添加单个空格?

时间:2019-02-08 06:53:59

标签: c++ padding ofstream

我要使用ofstream将浮点数<< <<到文件中,并在数字为正数时包含一个空格,例如使用

的方式
System.AggregateException: One or more errors occurred. 
---> Newtonsoft.Json.JsonSerializationException: 
Error converting value "tfsGit" to type 'Microsoft.VisualStudio.Services.ReleaseManagement.WebApi.PullRequestSystemType'. 
Path 'pullRequestConfiguration.codeRepositoryReference.systemType', 
line 1, position 238033. 
---> System.ArgumentException: Requested value 'tfsGit' was not found

以确保它们对齐。如何格式化<<以包含单个符号空间?

1 个答案:

答案 0 :(得分:3)

在标准库中似乎还没有一个。 如果您不介意冗长,则可以直接手动完成:

if (std::signbit(number) == false) // to avoid traps related to +0 and -0
    std::cout << " ";
std::cout << number;

(不要忘记#include <cmath>的{​​{1}}!)

但这更多是“变通办法”。 您还可以重新实现num_put方面: (此实现受到cppreference上的the example的启发)

signbit

并像这样使用它:

// a num_put facet to add a padding space for positive numbers
class sign_padding :public std::num_put<char> {
public:
    // only for float and double
    iter_type do_put(iter_type s, std::ios_base& f,
                     char_type fill, double v) const
    {
        if (std::signbit(v) == false)
            *s++ = ' ';
        return std::num_put<char>::do_put(s, f, fill, v);
    }
};

请参见live demo。 这样,您可以重复使用代码。