stringstream vs sprintf, sscanf.
前言
以前一直认为 stringstream 远不如 sprintf.
近日突然萌发了看看 stirngstream 是不是真的如我想的那么烂
对比
// stringstream.
stringstream sstream; sstream << << "abcc"; string str = sstream.str(); // 数字, 字符串混合.sstream << "123"; sstream >> num; // 字符串转数字.
// sprintf.
, ); sprintf(&str[], "%s%d", s, d); sprintf(&str[0], "%[^a-z]%*[a-z]%[^a-z]%*[a-z]%[^\0]", "2014-asddsaqwfdsf6-qweljkhdkjfhs29");
// sscanf.
sscanf(", "%d", &num);
从以上代码个来做比较.
stringstream:
提供了 数字, 字符串 互相转换功能.
完美支持string, 不需要提前知道 缓冲大小.
sprintf, sscanf.
需要提前设置缓冲大小, 比前者弱一点.
支持相当有限但非常强力的正则表达式, 完爆前者.
看到这, 聪明的你是不是已经猜到结果了呢.
逆袭
事实上, stringstream 相当强大, 只是你不知道...
咱们看看接下来的例子.
");
float f = parseTo<float>("1.23");
);
有没有发现, 这种写法既方便又优美.
stringstream 真正强大的地方还在后面..
class date {
public:
int year;
int month;
int day;
};
stringstream &operator<<(stringstream &sstream, const date &d)
{
sstream << d.year << d.month << d.day;
}
stringstream &operator>>(stringstream &sstream, date &d)
{
sstream >> d.year >> d.month >> d.day;
return sstream;
}
stringstream是可扩展的.
通过C++的重载运算符, 任何自定义类都可以通过stringstream转换.
再来看一段...
sstream << "2014";sstream << "asddsaqwfdsf6qweljkhdkjfhs29";
string str = regex_replace(sstream.str(), "[a-zA-Z]+", "-");
又举了一个不恰当的例子.
此时 str == "2014-6-29";
自己封装下, stringstream可以支持完整的正则表达式...
完爆sprintf, sscanf..
尾声
C++为我们提供的大部分功能, 其亮点并非其他语言自带的那么直观.
C++的亮点是, 几乎任何功能都可以无限扩展.
stringstream vs sprintf, sscanf.的更多相关文章
- c++拼接字符串效率比较(+=、append、stringstream、sprintf)
转自:http://www.cnblogs.com/james6176/p/3222671.html c++拼接字符串效率比较(+=.append.stringstream.sprintf) 最近写的 ...
- c/c++ 常见字符串处理函数总结 strlen/sizeof strcpy/memcpy/strncpy strcat/strncat strcmp/strncmp sprintf/sscanf strtok/split/getline atoi/atof/atol
这里总结工作中经常用到的一些c/c++的字符串处理方法,标黑的是使用频率较高的 1.strlen函数:计算目标字符串长度, 格式:strlen(字符指针指向区域) 注意1:①不包含字符串结束 ...
- 使用stringstream代替sprintf和sscanf
C++里面的字符串格式话 之前一直是用的sprintf和sscanf 比较麻烦的是要申请一个字符数组然后在调用 用stringstream就比较完美 int main(int narg,char** ...
- @清晰掉 sprintf sscanf双胞胎
sprintf() 格式化输出函数(图形) 功能: 函数sprintf()用来作格式化的输出.用法: 此函数调用方式为int sprintf(char *string,char *format,arg ...
- stringstream字符串流
例题详解 題目:输入的第一行有一个数字 N 代表接下來有 N 行資料,每一行資料里有不固定個數的整數(最多 20 個,每行最大 200 個字元),請你寫一個程式將每行的总和印出來. 輸入: 3 1 2 ...
- php中sprintf与printf函数用法区别
下面是一个示例:四舍五入保留小数点后两位 代码如下 复制代码 <?php$num1 = 21;echo sprintf("%0.2f",$num1)."<b ...
- c/c++ 数字转成字符串, 字符串转成数字
c/c++ 数字转成字符串, 字符串转成数字 ------转帖 数字转字符串: 用C++的streanstream: #include <sstream> #Include <str ...
- 解决CodeBlocks无法自动补全的问题
在Deepin下安装的CB,输入printf.scanf的时候不会自动补全,这样就很难受. 解决办法是在Setting -> Editor -> Syntax highlighting - ...
- C/C++中字符串与数字相互转换
数字转字符串: 用C++的streanstream: #include <sstream> #Include <string> string num2str(double i) ...
随机推荐
- iOS绘图教程 (转,拷贝以记录)
本文是<Programming iOS5>中Drawing一章的翻译,考虑到主题完整性,在翻译过程中我加入了一些书中没有涉及到的内容.希望本文能够对你有所帮助. 转自:http://www ...
- Sitemap Editors for Dynamics CRM 2013
I’ve started using a couple of different sitemap editors in my projects for CRM 2013. These tools he ...
- centos6.4 yum kvm
1. 安装软件包: yum -y install virt-manager; yum install qemu-kvm yum install libvirt yum install libvi ...
- 【面试虐菜】—— MongoDB知识整理
为什么我们要使用MongoDB? 特点: 高性能.易部署.易使用,存储数据非常方便.主要功能特性有: 面向集合存储,易存储对象类型的数据. 模式自由. 支持动态查询. 支持完全索引,包含内部对象. 支 ...
- children真的没有兼容性问题吗?
获取某一节点的所有子元素节点,你会用什么方法? 如果你用childNodes,那会有兼容性问题,对于标准浏览器,他包含的是元素节点和文本节点,我们还需要循环来判断节点的类型,是文本节点还是元素节点,不 ...
- IOS开发之带格式的文本
有时可能会遇到这样的问题,一个label中设置的文本含有2种以上不同的格式,又不能把它拆解为两个label来显示,这时用NSMutableAttributedString可以很好的解决问题. 示例如下 ...
- C#获取内存图像数据流的方法
背景:有的时候我们已经得到一个图像的内存对象,如Bitmap对象,我们想要获取到这个对象的数据流,可以将其序列化到磁盘上,并且也可以反序列化为内存对象,这个时候就有了如题的问题出现,我搜遍全网就是没有 ...
- Numeral.js 是一个用于格式化和数字四则运算的js 库
1.Numeral.js 是一个用于格式化和数字四则运算的js 库. 2.支持多种语言,包含中文在内的17种语言. 在浏览器中引用js文件: <script src="numeral. ...
- Linux系列:Ubuntu虚拟机设置固定IP上网(配置IP、网关、DNS、防止resolv.conf被重写)
虚拟机里设置上网方式为NAT最方便,因为无需手动设置即可上网,但是NAT的上网方式默认是DHCP动态分配IP的,这意味着你每次重启虚拟机都 有不一样的IP地址,这对一般用户没任何问题.但是如果你的机子 ...
- springMVC项目引入jstl标签库若干问题的总结
中午,不知道动到项目的哪个地方了,之前在联系人列表页面用的好好的jstl标签库突然报错了:<%@taglib prefix="c" uri="http://java ...