c++ - 有没有一种简单的方法可以将前导零添加到通过 std::to_string(int) 创建的字符串中?
问题描述
我通过将 an 转换为 astd::string
部分创建了以下内容:int
string
std::string text = std::string("FPS: " + std::to_string(1000 / d));
示例输出:
每秒帧数:60
现在,我想专门为int
零件添加前导零,以便得到以下输出:
帧率:060
我已经知道如何stdout
使用std::cout << std::setfill('0') << std::setw(5)
.
但我还没有找到简单std::to_string()
转换的解决方案。
解决方案
使用字符串流。
它的行为与 std::cout 完全相同,但有一个 str() 方法来获取您创建的字符串。
对于您的问题,它可能如下所示:
std::stringstream ss;
ss << "FPS: " << std::setfill('0') << std::setw(5) << std::to_string(1000 / d);
std::string text(ss.str());
编辑:为了测试它的性能,我创建了一个愚蠢的测试程序:
#include <sstream>
#include <iomanip>
int main()
{
std::stringstream ss;
for(int i=0; i<100000; i++)
{
ss.clear();
ss << "FPS: " << std::setfill('0') << std::setw(5) << std::to_string(i);
std::string text(ss.str());
}
return 0;
}
并用g++ -O3 main.cpp
. 然后我打开一个终端并通过以下方式启动程序time
:
$ time ./a.out
./a.out 1,53s user 0,01s system 99% cpu 1,536 total
因此,在我的 CPU 上运行 100k 次迭代(平均每次迭代 15.3µs)需要 1.53 秒,Intel(R) Core(TM) i5-8500 CPU @ 3.00GHz
运行 Linux 5.13.5 内核最新的 libstdc++
从指令的角度来看,它很长,数万条指令在小型微处理器上成本很高,但在现代系统上几乎不是问题。
推荐阅读
- python - 如何使用python正确保存excel文件?
- javascript - 如何在 Chrome 中保持重新加载/刷新页面或我想要的链接?
- ios - 谷歌移动视觉iOS swift
- android - 如何在警报对话框中将图像 URI 设置为图标?
- reactjs - 如何在 Context Provider 中访问 StaticRouter 的“context”道具
- python - 将字符串 0 和 1 转换为二进制等效 python
- html - 背景位置动画不流畅
- python - 在多维数组中将滑动窗口设置为列(来自 MATLAB 的 IM2COL) - Python
- javascript - SignalR 在使用 webpack 开发服务器代理时出现错误 [Invalid frame header]
- android - 如何在未经用户许可的情况下自动自动启动android应用程序?