我想以某种格式为文件写一个时间戳。
有没有办法使用修饰符创建一个新字符串(参见下面的printf代码)?或者是否有另一种在TextStream中使用字符串修饰符的方法?
printf("%02d-%02d-%02d_%02d:%02d:%02d.%02d\n",
st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond, st.wMilliseconds);
答案 0 :(得分:5)
不考虑缓冲区大小的类型安全替代方案是直接在IO manipulators上的输出流上使用std::ostringstream
:
#include <iostream>
#include <string>
#include <sstream>
#include <iomanip>
int main()
{
std::ostringstream s;
s << std::setfill('0')
<< std::setw(2) << 1 << ':' // st.wYear, etc
<< std::setw(2) << 97 << ':'
<< std::setw(2) << 4;
std::cout << s.str() << "\n";
return 0;
}
此外,之前的答案说明了将int
纳入std::string
的方法:Append an int to a std::string
答案 1 :(得分:1)
如果您使用sprintf
而非printf
,则所需的字符串将写入char
缓冲区而不是打印。
sprintf(buffer, "%02d-%02d-%02d_%02d:%02d:%02d.%02d\n",
st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond, st.wMilliseconds);
您还可以使用Boost Format library。