(1):Boost学习之格式化输出--format

原文链接:http://www.cnblogs.com/lzjsky/archive/2011/05/05/2037327.html

此文非常详细!

boost::format类提供了类似C语言里'printf'功能的格式化输出能力,当然功能更强大。

所需头文件:

#include <boost/format.hpp>

示例代码:

    #include <iostream>
#include <string>
#include <boost/format.hpp> using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
// 使用%序号%的方式给出指示符, 后面用%连接对应的数据。
cout << boost::format("writing %1%, x=%2% : %3%-th try") % "toto" % 40.23 % 50 << endl;
// 输出:writing toto, x=40.23 : 50-th try // 可以延迟使用,顺序不必一致
boost::format fmter("%2% %1%");
fmter % 36;
fmter % 77;
cout << fmter << endl;
// 输出:77 36 // 可重用
fmter % 12;
fmter % 24;
cout << fmter << endl;
// 输出:24 12 // 可直接转成字符串
std::string s = fmter.str();
std::string s2 = str( boost::format("%2% %1% %2% %1%")%"World"%"Hello"); cout << s << endl << s2 << endl;
// 输出:
// 24 12
// Hello World Hello World // 可以使用printf指示符
cout << boost::format("%3.1f - %.2f%%") % 10.0 % 12.5 << endl;
// 输出:10.0 - 12.50% // printf指示符里使用N$指定使用第几个参数
cout << boost::format("%2$3.1f - %1$.2f%%") % 10.0 % 12.5 << endl;
// 输出:12.5 - 10.00% cin.get();
return 0;
}

boost::format里的指示符语法大致有三大类:

继承并强化自printf的格式化字符串

形式为:[ N$ ] [ flags ] [ width ] [ . precision ] type-char

    N$可选,指定使用第N个参数(注意,要么所有指示符都加此参数,要么都不加)

    接下来的参数可以参数printf的指示符,只是format为其中的flags添加了'_'和'='标志,用于指出内部对齐和居中对齐。

设置打印规则,它是printf参数的一个补充,只是为了更直观点。

形式为:%|spec|

    如:%|1$+5|表示显示第一个参数,显示正负号,宽度为5

简单的位置标记

形式为:%N%

    简单地声明显示第N个参数,优点是比较直观而且不用指定类型。

(2):C/C++的格式化输出(4)--boost::format

原文链接:http://blog.sina.com.cn/s/blog_a0d2e5590101ados.html

此文比较系统!

boost::format里的指示符语法大致有四大类:

继承并强化自printf的格式化字符串

形式为:[N$
] [ flags ] [ width ] [ . precision ] type-char
   N$可选,指定使用第N个参数(注意,要么所有指示符都加此参数,要么都不加)
   接下来的参数可以参数printf的指示符,只是format为其中的flags添加了'_'和'='标志,用于指出内部对齐和居中对齐。

设置打印规则,它是printf参数的一个补充,只是为了更直观点。

形式为:%|spec|
   如:%|1$+5|表示显示第一个参数,显示正负号,宽度为5

简单的位置标记

形式为:%N%
   简单地声明显示第N个参数,优点是比较直观而且不用指定类型。

boost::format新的格式说明符 
  
 %{nt} 
 当n是正数时,插入n个绝对制表符 
 cout <<boost::format("[t]")  <<endl; 
 %{nTX} 
 使用X做为填充字符代替当前流的填充字符(一般缺省是一个空格) 
 cout <<boost::format("[T*]")  <<endl; 

浅尝BOOST之FORMAT

概述 

     std::string是个很不错的东东,但实际使用时基本在每个程序里都会遇到不愉快的事情:格式化字符串。我甚至由于这个原因在代码里引入平台有关的MFC,ATL等本来不需要在项目中使用的一些重量级的框架,就为了能轻松的做格式化字符串:-)。曾尝试过将ATL::CString的format函数提取出来使用,但ATL::CString的底层调用了windows独有函数,无法跨越平台。当然,现在有了boost::format,我们不用再担心了。boost::format重载了'%'操作符,通过多次调用'%'操作符就能将参数非常方便格式化成字符串,并实现了ATL::CString和C#中的string两者的格式化字符串功能。除了语法刚开始感觉到怪异,功能足以让人感觉到兴奋! 

一、boost::format工作的方式 

  

 基本的语法,boost::format( format-string ) % arg1 %arg2 % ... % argN 

  

 下面的例子说明boost::format简单的工作方式

// 方式一 
 cout << boost::format("%s") % "输出内容" << endl; 
 
 // 方式二 
 std::string s; 
 s = str(boost::format("%s") % "输出内容" ); 
 cout << s << endl; 
 
 // 方式三 
 boost::formatformater("%s"); 
 formater % "输出内容"; 
 std::string s = formater.str(); 
 cout << s << endl; 
 
 // 方式四 
 cout << boost::format("%1%") % boost::io::group(hex,showbase, 40) << endl; 

二、boost::format实际使用的实例 

  

 格式化语法: [ N$ ] [ flags ] [ width ] [ . precision ]type-char

// ATL::CString风格 
 cout << boost::format("\n\n%s" 
 "%1t 十进制 =[%d]\n" 
 "%1t 格式化的十进制 =[]]\n" 
 "%1t 格式化十进制,前补'0' =[d]\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; 
 
 // C#::string风格 
 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新的格式说明符 

  

 %{nt} 

 当n是正数时,插入n个绝对制表符 

 cout <<boost::format("[t]")  <<endl; 

  

 %{nTX} 

 使用X做为填充字符代替当前流的填充字符(一般缺省是一个空格) 

 cout <<boost::format("[T*]")  <<endl;

四、异常处理

一般写法:

 try 
 { 
 cout << boost::format("%d%d") % 1 << endl; 
 } 
 catch(std::exception const & e) 
 { 
 cout << e.what() << endl; 
 
 // 输出内容: 
 // boost::too_few_args:format-string
refered to more arguments than werepassed 
 } 

boost::format的文档中有选择处理异常的办法,不过个人感觉实用性可能不强,下面是文档中的例子

 // boost::io::all_error_bitsselects
all errors 
 // boost::io::too_many_args_bitselects
errors due to passing too manyarguments. 
 // boost::io::too_few_args_bitselects
errors due to asking for the srting result before allarguments are passed 
 
 boost::formatmy_fmt(const std::string & f_string) 
 { 
 using namespace boost::io; 
 formatfmter(f_string); 
 fmter.exceptions(all_error_bits ^ (too_many_args_bit | too_few_args_bit)
); 
 return fmter; 
 } 
 cout << my_fmt(" %1%%2%\n") % 1 % 2 % 3 % 4 % 5;

五、还有其它一些功能,但暂时感觉派不上用处,就不去深究了。

(3):char*,const char*和string的相互转换

原文链接:http://blog.sina.com.cn/s/blog_5436b2f40100pjzz.html

为了以后查找方便,特此总结如下。

如果有不对的地方或者有更简单的方法,请指出~~

1.// string转const char*
string s = "abc";
const char* c_s =s.c_str();  2.// const char*转string
直接赋值即可
const char* c_s ="abc";
string s(c_s); 3. //string转char* string s = "abc";
char* c;
const int len =s.length();
c = new char[len+1];
strcpy(c,s.c_str()); 4. //char*转string
char* c = "abc";
string s(c); 5. //const char*转char*
const char* cpc ="abc";
char* pc = newchar[100];//足够长
strcpy(pc,cpc); 6. //char*转const char*
//直接赋值即可
char* pc = "abc";
const char* cpc = pc;

(4):我的遍历代码

Boost字符串处理的更多相关文章

  1. boost字符串算法

    boost::algorithm简介 2007-12-08 16:59 boost::algorithm提供了很多字符串算法,包括: 大小写转换: 去除无效字符: 谓词: 查找: 删除/替换: 切割: ...

  2. boost 字符串大小写转换

    示例代码如下: #include <boost/algorithm/algorithm.hpp> #include <iostream> using namespace std ...

  3. Linux环境编程相关的文章

    Linux环境编程相关的文章 好几年没有接触Linux环境下编程了,好多东西都有点生疏了.趁着现在有空打算把相关的一些技能重拾一下,顺手写一些相关的文章加深印象. 因为不是写书,也受到许多外部因素限制 ...

  4. C++ 著名程序库 概览

          本文转载自: http://ace.acejoy.com/thread-3777-1-1.html   1.C++各大有名库的介绍--C++标准库 2.C++各大有名库的介绍--准标准库B ...

  5. C++类库

    转载自:http://blog.csdn.net/Augusdi/article/details/8989763 基础类 一.C++标准库 1. Dinkumware C++ Library 参考站点 ...

  6. C++ Development Library

    C/C++ 开发库 | C/C++ Development Library 这里收集一些著名的 C/C++ 开发库.SDK.类库.可复用类与结构代码 等信息,列举它们的介绍.参考和网站链接,为各位 C ...

  7. (三)Boost库之字符串处理

    (三)Boost库之字符串处理 字符串处理一直是c/c++的弱项,string_algo库很好的弥补了这一点. string_algo 库算法命名规则: 前缀i    : 有这个前缀表名算法的大小写不 ...

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

    (二)boost库之字符串格式化 程序中经常需要用到字符串格式化,就个人而言还是比较倾向于C格式的输出,如果只是打印日志,printf就够了,如果到生成字符串,获取你可以选择sprintf,但这些都是 ...

  9. boost:regex分割字符串(带有'\'字符) - zzusimon的专栏 - 博客频道 - CSDN.NET

    boost:regex分割字符串(带有'\'字符) - zzusimon的专栏 - 博客频道 - CSDN.NET boost:regex分割字符串(带有'\'字符) 分类: C++ 2011-08- ...

随机推荐

  1. POJ3253 Fence Repair【贪心】

    我们的小伙伴Bingo真的很调皮,他在上课的路上看到树上有个鸟窝,他就想去把他捅下来,但是鸟窝很高他够不到,于是他就到处找木棍,想把这些木棍接在一起,然后去捅鸟窝.他一共找了N跟木棍 (1 ≤ N ≤ ...

  2. Golang - 复合类型

    目录 Golang - 复合类型 1. 指针 2. new()和make() 3. 数组 4. slice 5. Map 6. 结构体 7. 结构体参数 Golang - 复合类型 1. 指针 go语 ...

  3. 02017_String类方法使用练习

    1.获取指定字符串中,大写字母.小写字母.数字的个数. public static void method(String str){ int bigCount = 0; //大写字母的个数 int s ...

  4. (32)Spring Boot使用@SpringBootApplication注解,从零开始学Spring Boot

    [来也匆匆,去也匆匆,在此留下您的脚印吧,转发点赞评论] 如果看了我之前的文章,这个节你就可以忽略了,这个是针对一些刚入门的选手存在的困惑进行写的一篇文章. 很多Spring Boot开发者总是使用 ...

  5. cocos2d-android学习四 ---- 精灵的创建

    上篇文章我们创建了一个黑乎乎的界面.以下我们就给它增加一个精灵. 我们这次就一起来学习精灵的基础知识. 1.什么是精灵 游戏中全部会动的对象都是精灵,能够是主人公,背景元素,一个子弹或者是敌人. 一个 ...

  6. 报错configure:error: no acceptable C compiler found in $PATH。。

    报错configure:error: no acceptable C compiler found in $PATH.. 查看日志: 出错原因:新安装的linux系统,没有gcc库 解决方案:使用yu ...

  7. 固定管线shader编写:基本属性

    欢迎转载!转载时请注明出处:http://write.blog.csdn.net/postedit/50753008 shader 部分介绍: properties:属性部分 material:材质部 ...

  8. scanf,printf函数细节

    今天笔试的时候遇到一个考察C语言scanf函数的题目 int x; float y; scanf("%3d%f",&x,&y); // input 123456 6 ...

  9. SQL SERVER读书笔记:内存

    系统先操作地址空间,真正要用的时候才申请物理内存,进行使用. Reserved Memory  保留内存,虚拟内存 Commited Memory 提交内存,物理内存 [如何判断SQL SERVER ...

  10. ios swift学习日记4-字符串和字符

    近期ios的swift语言好像火了起来,本人没有objectc的基础,但之前是有c跟java的基础的. 从这几天開始学习ios的swift语言,后期以博客形式公布.这里提供一本翻译的英文版的swif书 ...