• (二)boost库之字符串格式化


    (二)boost库之字符串格式化

    程序中经常需要用到字符串格式化,就个人而言还是比较倾向于C格式的输出,如果只是打印日志,printf就够了,如果到生成字符串,获取你可以选择sprintf,但这些都是需要你预先分配空间的,对于一些不可预知长度的字符串格式化,就比较鸡肋了,不过还是可以实现的,如:

    void XString::format(const char *strFmt, ...)
    
    {
    
        va_list vl;
    
    
    
        va_start(vl, strFmt);
    
        int count = _vscprintf(strFmt, vl); //_vsctprintf(format, vl); 
    
        va_end(vl);
    
    
    
        char *pszBuf = new char[count + 1];
    
        va_start(vl, strFmt);
    
        vsprintf_s(pszBuf, count + 1, strFmt, vl);  //_vstprintf_s
    
        va_end(vl);
    
        this->assign(pszBuf);
    
        delete pszBuf;
    
    }

    但对于C++程序来说,%s支持的字符串参数类型必须是char*, 所以程序到处都需要.c_str(),经常也会因此造成大量的乱码输出

    有了boost的format组件,以上问题就都迎刃而解了。

    一、format 替代printf的功能

    std::cout << format("%s:%04d%02d%02d") % "日期"% 2013 % 9 % 28 << std::endl;

    %s可以是std::string

    std::string test("string");
    
    format fmt3("%s");    
    
    std::cout << format("%s") % test<< std::endl;

    二、format支持%N

    format fmt2("%1% + %2%*%1% = %3%");
    
    fmt2 % 2 % 3 % (2+2*3) ;
    
    std::cout << fmt2.str() << std::endl;
  • 相关阅读:
    C平衡二叉树(AVL)创建和删除
    C格式字符串转为二叉树
    C前序遍历二叉树Morris Traversal算法
    C单链表操作
    C仿黑白棋版XO棋
    C传递参数给main函数
    C图形化第一步
    Perl看完这个,再不敢说自己会玩贪吃蛇
    Perl寻路A*算法实现
    C字符贪吃蛇
  • 原文地址:https://www.cnblogs.com/timssd/p/5544668.html
Copyright © 2020-2023  润新知