如何在C ++中使用字符串修饰符创建新字符串?

时间:2012-08-06 20:12:49

标签: c++ string writetofile

我想以某种格式为文件写一个时间戳。

有没有办法使用修饰符创建一个新字符串(参见下面的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);

2 个答案:

答案 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