2011-11-21 94 views
1

我有std::string20040531,我想将其格式设置为2004.05.31使用Boost将字符串YYYYMMDD格式化为YYYY.MM.DD

除了在各自的位置做一个std::insert的直接方式,还有更好的方法来使用Boost来做到这一点吗?

PS。我无法使用其他Boost调用来获取日期/时间,因为此字符串是通过自定义API返回的。所以这个问题被简化为基本的字符串格式,这可能听起来并不令人兴奋,但我正在学习Boost。

+0

为什么使用Boost?为什么不只是为什么不只是'a.substr(0,4)+“。” + a.substr(4,2)+“。” + a.substr(6,2)'? –

+2

没有很好的理由,只是试图以不同的方式做同样的事情。 –

回答

3

你可以使用boost::format ......

#include <string> 
#include "boost/format.hpp" 
#include <iostream> 

int main() 
{ 
    std::string a("20040531"); 
    std::cout << boost::format("%1%.%2%.%3%") 
        % a.substr(0,4) % a.substr(4,2) % a.substr(6,2); 
} 

您明确被问及这样使用Boost,但是如果你想要做这在C++不引入升压的依赖,那么你可以只使用一个流达成同样的目的:

#include <sstream> 
#include <string> 
#include <iostream> 

int main() 
{ 
    std::stringstream s; 
    std::string a("20040531"); 
    s << a.substr(0,4) << '.' << a.substr(4,2) << '.' << a.substr(6,2); 
    std::cout << s.str(); 
} 
+0

干杯!我不得不提出不可避免的风险,表现出愚蠢。有没有教程,解释“如何”使用boost ::格式,我确实搜索它,但无法获得任何相关的。 –

+0

[我发布到文档的链接](http://www.boost.org/doc/libs/1_48_0/libs/format/doc/format.html)包含了一个很好的解释和许多例子。 – razlebe

相关问题