c++ - 如何将 std::to_string 函数的预填充归零?
问题描述
在使用 std::to_string() 的 C++ 中,我应该如何预填充从整数转换的字符串?我尝试使用 #include 和 std::setfill('0') 但它不起作用。这是简单的测试代码。
#include <iostream>
#include <string>
//#include <iomanip> // setw, setfill below doesn't work
int main()
{
int i;
for (i=0;i<20;i++){
std::cout << "without zero fill : " << std::to_string(i) << ", with zero fill : " << std::to_string(i) << std::endl;
//std::cout << std::setw(3) << std::setfill('0') << "without zero fill : " << std::to_string(i) << ", with zero fill : " << std::to_string(i) << std::endl; // doesn't work
}
}
我想要做的是,将一些数字转换为字符串,但其中一些使用零填充,其他没有。(我实际上是用它来制作文件名。)我应该怎么做?
(我不知道为什么这不像在 C 中使用 %0d 或 %04d 格式说明符那么简单。)
ADD :从将前导零添加到字符串,没有 (s)printf,我发现
int number = 42;
int leading = 3; //6 at max
std::to_string(number*0.000001).substr(8-leading); //="042"
这对我有用,但我更喜欢更自然的解决方案,而不是这种类似技巧的方法。
解决方案
ostringstream
似乎是矫枉过正。您可以简单地插入所需的零数:
template<typename T/*, typename = std::enable_if_t<std::is_integral_v<T>>*/>
std::string to_string_with_zero_padding(const T& value, std::size_t total_length)
{
auto str = std::to_string(value);
if (str.length() < total_length)
str.insert(str.front() == '-' ? 1 : 0, total_length - str.length(), '0');
return str;
}
value
如果是负数和/或如果T
是char
或相关类型,此功能也可以正常工作。
推荐阅读
- python-3.x - 在 django 中向用户返回响应后发送电子邮件
- linux - 在 bash 中,$@ 和 "$@" 有什么区别?
- python - 键入时: print(Topic.objects.all()) ,我收到错误消息: django.db.utils.OperationalError: no such table:
- javascript - Vue动态组件,如何处理不同的emit和pass props并替换不同的slot?
- c# - 打开目录c#中的所有.exe文件
- tensorflow - AttributeError:模块“tensorflow”没有属性“contrib”
- python - 如何通过 Django ORM 获得另一个模型的最高评价?
- airflow - 气流网络服务器没有响应(一些工人似乎已经死亡,gunicorn 没有按预期重新启动它们)
- javascript - Next.js - `npm run build` 失败
- html - 谁能解释如何将数据库值链接到 div