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) ...
随机推荐
- 【Java基础】Java接口的总结
什么是接口 接口和抽象类很相似,也是一种抽象的概念,用Interface关键字来修饰.那有了抽象类为啥还要有个接口呢,既然都是抽象的,要一个不就可以了吗?其实不是这样的,抽象类是对一类事物共性的一种抽 ...
- 【原创】一个复制本地文件到Hadoop文件系统的实例
import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net ...
- Hadoop工程师面试题(1)--MapReduce实现单表汇总统计
数据源格式描述: 输入t1.txt源数据,数据文件分隔符"*&*",字段说明如下: 字段序号 字段英文名称 字段中文名称 字段类型 字段长度 1 TIME_ID 时间(到时 ...
- iOS 第三方库冲突的处理
最近项目组在做一些第三方功能的集成,不止一次的遇到第三方库冲突的问题,报错如下: duplicate symbol _OBJC_METACLASS_$_JKSerializer in: /Users/ ...
- pptp vpn
webalizer是一个高效的.免费的web服务器日志分析程序.其分析结果以HTML文件格式保存,从而可以很方便的通过web服务器进行浏览; http://daliang1215.iteye.com/ ...
- Learning JavaScript Design Patterns The Observer Pattern
The Observer Pattern The Observer is a design pattern where an object (known as a subject) maintains ...
- [置顶] 斗地主算法的设计与实现--项目介绍&如何定义和构造一张牌
大学期间,我在别人的基础上,写了一个简易的斗地主程序. 主要实现了面向对象设计,洗牌.发牌.判断牌型.比较牌的大小.游戏规则等算法. 通过这个斗地主小项目的练习,提高了我的面向对象设计能力,加深了对算 ...
- 百度的TSDB——可针对tag查询,应该类似kairosDB
天工架构 目前,天工平台的服务主要由物接入.物解析.物管理.规则引擎和时序数据库组成,并可无缝对接百度云天算智能大数据平台及基础平台产品,可提供千万级设备接入的能力,百万数据点每秒的读写性能,超高的压 ...
- 自己动手Jquery插件
最近Web应用程序中越来越多地用到了JQuery等Web前端技术.这些技术框架有效地改善了用户的操作体验,同时也提高了开发人员构造丰富客户 端UI的效率.JQuery本身提供了丰富的操作,但是,有时候 ...
- MVC模式网站编写经验总结
单个网站使用MVC架构模式经验总结,包含具体网站包分类.包内类的编写.注意事项等方面.本人认为,按照如下包分类及编写方法,已经满足一个简单普通网站(主要针对java)的编写需求. MVC主要层级 数据 ...