广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >boost字符串处理函数format的用法
  • 711
分享到

boost字符串处理函数format的用法

2024-04-02 19:04:59 711人浏览 独家记忆
摘要

用boost::fORMat来格式化字符串 在字符串处理中少不了格式化字符串,c++中传统的格式化函数是C语言的sprintf,但它一个很大的问题就是不安全。因此,在stl中引入了s

用boost::fORMat来格式化字符串

在字符串处理中少不了格式化字符串,c++中传统的格式化函数是C语言的sprintf,但它一个很大的问题就是不安全。因此,在stl中引入了stringstream来实现安全格式化,但是stringstream却远不如sprintf来得直观。例如,对如如下代码:

    char text[]="hello";    
    bool is_all_lower = boost::alGorithm::all(text, is_lower());

    char output[128];
    sprintf(output, "<%s> %s in the lower case", text, (is_all_lower? "is": "is not"));

如果把最后两句format的函数用stringstream来写的话,可读性是远不如sprintf的。

    stringstream output;
    output << "<" << text << "> "
        << (is_all_lower)? "is": "is not") 
        << " in the lower case";

boost引入了一个提供类似.net中的string.format的方式提供格式化字符串的函数,用它来格式化的话就是如下形式:

    boost::format fmt = boost::format("<%s> %s in the lower case") % text % (is_all_lower? "is": "is not");
    string output = fmt.str();

前面的例子中演示的是C风格的格式化字符串,boost.format也提供了类似.net风格的格式化字符串方式:

    boost::format fmt = boost::format("<%1%> %2% in the lower case") % text % (is_all_lower? "is": "is not");
    cout << fmt << endl;

这种方式更容易看到参数在格式化字符串中的位置,推荐这种形式。不过它的起始坐标是1而不是0,用惯了.net的string.format的朋友需要注意下。

格式化控制

格式化语法为: [ N$ ] [ flags ] [ width ] [ . precision ] type-char。也提供了C语言和.net两种风格。

    //传统c语言风格
    cout << boost::format("\n\n%s" 
            "%1t 十进制 = [%d]\n" 
            "%1t 格式化的十进制 = [%5d]\n" 
            "%1t 格式化十进制,前补'0' = [%05d]\n" 
            "%1t 十六进制 = [%x]\n" 
            "%1t 八进制 = [%o]\n" 
            "%1t 浮点 = [%f]\n" 
            "%1t 格式化的浮点 = [%3.3f]\n" 
            "%1t 科学计数 = [%e]\n" 
            ) % "example :\n" % 15 % 15 % 15 % 15 % 15 % 15.01 % 15.01 % 15.01 << endl; 

    //.net的风格
    cout << boost::format("%1%" 
            "%1t 十进制 = [%2$d]\n" 
            "%1t 格式化的十进制 = [%2$5d]\n" 
            "%1t 格式化十进制,前补'0' = [%2$05d]\n" 
            "%1t 十六进制 = [%2$x]\n" 
            "%1t 八进制 = [%2$o]\n" 
            "%1t 浮点 = [%3$f]\n" 
            "%1t 格式化的浮点 = [%3$3.3f]\n" 
            "%1t 科学计数 = [%3$e]\n" 
            ) % "example :\n" % 15 % 15.01 << endl;

异常处理

既然boost.format函数是用来代替sprintf的,那么自然就得有异常处理的功能,而不是像sprintf那样死给你看。boost.format的处理方法是抛异常,它在如下两种情况家会抛异常:

  • format字符串非法

  • format绑定非法

如下代码演示了这两种情形:

    try
    {
        boost::format("<%3");
    }
    catch(std::exception& err)
    {
        cout << err.what() << endl;
    }

    boost::format fmt = boost::format("<%3%> %2% in the lower case") % text % (is_all_lower? "is": "is not");
    try
    {
        cout << fmt << endl;
    }
    catch(std::exception& err)
    {
        cout << err.what() << endl;
    }

封装

boost.format是以一个对象,而不是函数来实现的,导致其使用和异常处理起来要麻烦不少,不过,利用c++11的可变参数模板的语法还是可以很容易把它封装成一个可变参数的函数的形式:

string string_fromat(const char* format, …)

需要定义三个重载版本:

    template<class TFirst>
    void string_format(boost::format& fmt, TFirst&& first)
    {
        fmt % first;
    }

    template<class TFirst, class... TOther>
    void string_format(boost::format& fmt, TFirst&& first, TOther&&... other)
    {
        fmt % first;
        string_format(fmt, other...);
    }

    template<class TFirst, class... TOther>
    string string_format(const char* format, TFirst&& first, TOther&&... other)
    {
        boost::format fmt(format);
        string_format(fmt, first, other...);
        return fmt.str();
    }

现在就可以这么用了:

auto output = string_format("<%1%> %2% in the lower case", text, (is_all_lower? "is": "is not"));

所有的异常也都会在该函数中抛出,虽然效率上相对低点,但用起来要舒服点。

到此这篇关于boost字符串处理函数format的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: boost字符串处理函数format的用法

本文链接: https://www.lsjlt.com/news/151903.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • boost字符串处理函数format的用法
    用boost::format来格式化字符串 在字符串处理中少不了格式化字符串,C++中传统的格式化函数是C语言的sprintf,但它一个很大的问题就是不安全。因此,在stl中引入了s...
    99+
    2022-11-13
  • boost字符串处理函数format怎么使用
    这篇文章主要介绍“boost字符串处理函数format怎么使用”,在日常操作中,相信很多人在boost字符串处理函数format怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”boost字符串处理函数f...
    99+
    2023-07-02
  • Python format字符串格式化函数的使用
    目录一、简介二、占位符%方式三、format格式化方式1、使用默认位置方式2、使用指定位置方式3、使用列表方式4、使用字典的键值对方式5、其他数字格式化的方式四、Reference一...
    99+
    2022-11-12
  • PHP函数的字符串处理函数
    PHP是一种非常流行的编程语言,它广泛用于Web开发。在PHP中,字符串处理是非常重要的,因为Web开发中大部分的数据都是以字符串的形式出现的。为了方便开发人员对字符串进行操作,PHP提供了许多有用的字符串处理函数,它们的使用非常简单,本文...
    99+
    2023-05-19
    函数 PHP 字符串处理
  • Python3中怎么使用format函数格式化字符串
    Python3中怎么使用format函数格式化字符串,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。在Python3中,字符串格式化操作通过format()方法或者f’strin...
    99+
    2023-06-02
  • 字符串相似度处理函数
    oracle里面查比如存储过程里面与表SALES有关jobs: SELECT * FROM (SELECT a.name,upper(b.what)AS what,SYS.UTL_MATCH.edit_dist...
    99+
    2021-03-02
    字符串相似度处理函数
  • mysql字符串处理函数大全
    ASCII():返回给定字符的ASCII值。 示例:SELECT ASCII('A'); 返回65。 BIN():将给定的整数转换为二进制字符串表示。 示例:SELECT BIN(10); 返回'10...
    99+
    2023-09-18
    mysql 数据库
  • python字符串处理函数怎么使用
    Python字符串处理函数可以通过调用函数的方式来使用。以下是一些常用的字符串处理函数的示例用法:1. len() 函数:返回字符串...
    99+
    2023-09-16
    python
  • php字符串处理函数有哪些
    php中常用的字符串处理函数有strlen()、strpos()、trim()几种strlen()函数strlen()函数作用:php中strlen()函数的作用是用于获取字符串的长度。strlen()函数语法:strlen(st...
    99+
    2022-10-07
  • Python3中字符串格式化format函数详解是怎样的
    这期内容当中小编将会给大家带来有关Python3中字符串格式化format函数详解是怎样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。格式限定符format通过丰富的的“格式限定符”(语法是 {}中带:...
    99+
    2023-06-02
  • javascript字符串处理类的用法
    这篇文章主要讲解了“javascript字符串处理类的用法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“javascript字符串处理类的用法”吧!//===================...
    99+
    2023-06-03
  • MYSQL的字符串函数具体用法
    本篇内容介绍了“MYSQL的字符串函数具体用法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!对于针对字符串...
    99+
    2022-10-18
  • php字符串反转函数的用法
    php字符串反转函数用法: 在php中可以调用strrev()函数反转字符串。调用strrev()函数反转字符串需注意语法:strrev(string),string是必需的,规定反转字符串。具体代码如下:<php echo...
    99+
    2022-10-22
  • sql中有哪些字符串处理函数
    本篇文章给大家分享的是有关sql中有哪些字符串处理函数,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、常用函数 1、ASCII() ...
    99+
    2022-10-18
  • Golang函数的字符串处理和字符编码转换技巧
    Golang作为一门编程语言,它所提供的字符串处理和字符编码转换功能非常强大和丰富。本文将介绍Golang函数中常用的字符串处理和字符编码转换技巧,帮助读者更好地理解和使用Golang。一、字符串处理字符串连接在Golang中,可以使用"+...
    99+
    2023-05-18
    字符串处理 Golang函数 字符编码转换技巧
  • Python处理字符串的常用函数实例总结
    目录前言 字符串都有哪些操作?第一类判断识别字符串第二类字符串编辑的操作第三类:字符串跟字节串的互转总结前言 今天我们说了字符串的基础,格式化,这次我们讲解字符串的常用函数...
    99+
    2022-11-12
  • Python字符串处理的方法
    本文小编为大家详细介绍“Python字符串处理的方法”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python字符串处理的方法”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。 ...
    99+
    2022-10-19
  • C语言如何使用字符串处理函数
    这篇文章主要介绍了C语言如何使用字符串处理函数,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。strlen:1.计数器版本:#include<stdio.h>#in...
    99+
    2023-06-22
  • 详解C语言对字符串处理函数的实现方法
    目录strlen:1.计数器版本:2.递归的版本3.指针-指针版本strcat:strcmp:总结strlen: 1.计数器版本: #include<stdio.h>...
    99+
    2022-11-12
  • C语言的字符函数和字符串函数怎么用
    这篇文章主要讲解了“C语言的字符函数和字符串函数怎么用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言的字符函数和字符串函数怎么用”吧!一、字符&字符串函数1.strlen--求...
    99+
    2023-06-26
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作