String and Text Processing(字符串和文本处理)
来源:互联网 发布:软媒win10优化工具 编辑:程序博客网 时间:2024/05/18 02:51
一、概述
有时一个值要转换成为文本格式,如int代表 std::string,或者相反,一个std::string代表一个int数值。这样的转换是很普通的,如在内部程序运行中的数据和配置文件中的数据。
标准C和C++库提供了大量机制进行转换,它们在易用性,扩展性和安全性方面各有不同.
例如:C的函数 atoi(),atof()(在stdlib.h下)等有大量限制:
- 仅在一个方向进行转换:从文本转为内部数据类型,要进行相反的转换要对易用性和安全性做一个妥协,如sprintf()等,或者损失可移值性如 itoa()。
- 所支持的数据类型仅是内置数据类型的一个子集,如 int,long和 double。
- 所支持的类型不能以一种统一的形式进行扩展。如将字符串转为复数或实数。
标准C函数strtol()有相同的限制,但是提供好优雅的转换控制,然而这样的控制在很多时侯不需要或者没有用。scanf()函数家族提供了更好的控制,但缺乏安全性和易用性。
标准C++提供了stringstream类,它提供了大量用于任意类型文件的控制和转换,然而对于简单的的转换,stringstream显得太笨拙和难以理解。
lexical_cast()函数模板提供了一种可以将文本转换为任意其它类型一种简便、统一的方式,它的简便是表达式层面的简便。而更复杂、更精确的转换则推荐用stringstream完成。数字与数字之间的转换,boost::numeric_cast()则比lexical_cast更方便。
对于字符串格式化,包括stringstream,lexical_cast等比较可以参看 http://www.gotw.ca/publications/mill19.htm,它上面提供的示例是很有帮助的。
二、Examples
#include "stdafx.h"
#include <boost/lexical_cast.hpp>
#include <boost/foreach.hpp>
#include <iostream>
#include <vector>
using namespace std;
void log_message(const std::string&);
void log_errno(int yoko)
{
//log_message("Error" + boost::lexical_cast<std::string>(yoko)+":" + strerror((yoko)));
}
int main(int argc, char* argv[])
{
for (int i = 0; i < argc; i++)
{
cout << argv[i] << endl;
}
using boost::lexical_cast;
using boost::bad_lexical_cast;
vector<short>args;
while (*++argv)
{
try
{
args.push_back(lexical_cast<short>(*argv));
}
catch (bad_lexical_cast&)
{
args.push_back(0);
}
}
for (short s : args)
{
cout << s << endl;
}
return 0;
}
- String and Text Processing(字符串和文本处理)
- 字符、字符串和文本处理
- 练习6:字符串(string)和文本
- 笨办法06字符串(string)和文本
- CLR(字符、字符串和文本处理)
- boost 字符串和文本处理库概述
- Boost Library 1.32.0 : String and text processing
- Text Processing and Manipulation
- 笨方法学Python 习题 6: 字符串(string)和文本
- 笨方法学习Python-习题6:字符串(string)和文本
- PHP - Manual手册 - Function Reference函数参考 - Text Processing文本处理 - Strings字符串 - String Functions字符串函数 - strip_tags字符串中去除HTML和PHP标记
- python06 字符串和文本
- 字符串和文本IO
- [00100] 字符串和文本
- 字符串和文本IO
- how to display value and text in query(query显示值和文本)
- 信息编码:字符串和文本
- 习题6 字符串和文本
- OC数据类型
- 基于共享内存的key-value存储
- WOJ-1316
- cocos2dx3.2开发 RPG《Flighting》(五)只能行走的战斗场景
- Qt5学习笔记(3)——树形控件QtreeWidget
- String and Text Processing(字符串和文本处理)
- android工程中使用speex源码通过Cygwin生成libspeex.so
- 在eclipse(android developer tool)上配置github环境,用于团队开发时的项目管理
- HBase连接池 HTablePool被Deprecated之后
- 看了一篇电子电子工程师的总结很经典,用来提醒自己
- [2.x] Cocos2d-x之CCMenu
- DNA Consensus String, ACM/ICPC Seoul 2006, UVa1368
- svn
- OC属性property