Boost字符串处理
原文链接:http://www.cnblogs.com/lzjsky/archive/2011/05/05/2037327.html
此文非常详细!
所需头文件:
#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个参数,优点是比较直观而且不用指定类型。
%{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简单的工作方式

















二、boost::format实际使用的实例
格式化语法: [ N$ ] [ flags ] [ width ] [ . precision ]type-char




























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










refered to more arguments than werepassed


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

all errors

errors due to passing too manyarguments.

errors due to asking for the srting result before allarguments are passed






);



五、还有其它一些功能,但暂时感觉派不上用处,就不去深究了。
(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字符串处理的更多相关文章
- boost字符串算法
boost::algorithm简介 2007-12-08 16:59 boost::algorithm提供了很多字符串算法,包括: 大小写转换: 去除无效字符: 谓词: 查找: 删除/替换: 切割: ...
- boost 字符串大小写转换
示例代码如下: #include <boost/algorithm/algorithm.hpp> #include <iostream> using namespace std ...
- Linux环境编程相关的文章
Linux环境编程相关的文章 好几年没有接触Linux环境下编程了,好多东西都有点生疏了.趁着现在有空打算把相关的一些技能重拾一下,顺手写一些相关的文章加深印象. 因为不是写书,也受到许多外部因素限制 ...
- C++ 著名程序库 概览
本文转载自: http://ace.acejoy.com/thread-3777-1-1.html 1.C++各大有名库的介绍--C++标准库 2.C++各大有名库的介绍--准标准库B ...
- C++类库
转载自:http://blog.csdn.net/Augusdi/article/details/8989763 基础类 一.C++标准库 1. Dinkumware C++ Library 参考站点 ...
- C++ Development Library
C/C++ 开发库 | C/C++ Development Library 这里收集一些著名的 C/C++ 开发库.SDK.类库.可复用类与结构代码 等信息,列举它们的介绍.参考和网站链接,为各位 C ...
- (三)Boost库之字符串处理
(三)Boost库之字符串处理 字符串处理一直是c/c++的弱项,string_algo库很好的弥补了这一点. string_algo 库算法命名规则: 前缀i : 有这个前缀表名算法的大小写不 ...
- (二)boost库之字符串格式化
(二)boost库之字符串格式化 程序中经常需要用到字符串格式化,就个人而言还是比较倾向于C格式的输出,如果只是打印日志,printf就够了,如果到生成字符串,获取你可以选择sprintf,但这些都是 ...
- boost:regex分割字符串(带有'\'字符) - zzusimon的专栏 - 博客频道 - CSDN.NET
boost:regex分割字符串(带有'\'字符) - zzusimon的专栏 - 博客频道 - CSDN.NET boost:regex分割字符串(带有'\'字符) 分类: C++ 2011-08- ...
随机推荐
- loadrunner安装方法
1.loadrunner安装网盘地址: http://pan.baidu.com/s/1hrP6mDQ 一般会提示:“vc2005_sp1_with_atl_fix_redist 2.确认时提示缺少 ...
- 【剑指Offer】12、数值的整数次方
题目描述: 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 解题思路: 本题看似比较简单,是一个简单的指数运算,但需要完 ...
- 【Leetcode】【简单】【169求众数】【JavaScript】
题目 169. 求众数 给定一个大小为 n 的数组,找到其中的众数.众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素. 你可以假设数组是非空的,并且给定的数组总是存在众数. 示例 1: 输入: [ ...
- MySQL7.5.15数据库配置主从服务器实现双机热备实例教程
环境说明 程序在:Web服务器192.168.0.57上面 数据库在:MySQL服务器192.168.0.67上面 实现目的:增加一台MySQL备份服务器(192.168.0.68),做为MySQL服 ...
- python数据标准化
def datastandard(): from sklearn import preprocessing import numpy as np x = np.array([ [ 1., -1., 2 ...
- MYSQL更换密码
MYSQL5.7以下版本的数据库密码使用的是 mysql这个数据库里的user表的password这个字段, 修改密码只需: 1.update MySQL.user set password=pass ...
- Java开发编码规范
第一章 代码开发规范及其指南 一.1 目的 定义这个规范的目的是让项目中所有的文档都看起来像一个人写的,增加可读性,减少项目组中因为换人而带来的损失.(这些规范并不是一定要绝对遵守,但是一定要让程序有 ...
- CodeForces - 274A - k-Multiple Free Set
先上题目 k-Multiple Free Set time limit per test 2 seconds memory limit per test 256 megabytes input sta ...
- MySQL优化之——为用户开通mysql权限
转载请注明出处:http://blog.csdn.net/l1028386804/article/details/46627263 为用户开通mysql权限: grant all privileges ...
- webbench压力測试工具
apache的測试工具ab 在并发100个以上后会出现错误.网上也有非常多改ab源代码来解禁的. 只是还是推荐一款比較好用的压力測试工具webbench wget http://blog.zyan.c ...