前言

以前一直认为 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.的更多相关文章

  1. c++拼接字符串效率比较(+=、append、stringstream、sprintf)

    转自:http://www.cnblogs.com/james6176/p/3222671.html c++拼接字符串效率比较(+=.append.stringstream.sprintf) 最近写的 ...

  2. 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:①不包含字符串结束 ...

  3. 使用stringstream代替sprintf和sscanf

    C++里面的字符串格式话 之前一直是用的sprintf和sscanf 比较麻烦的是要申请一个字符数组然后在调用 用stringstream就比较完美 int main(int narg,char** ...

  4. @清晰掉 sprintf sscanf双胞胎

    sprintf() 格式化输出函数(图形) 功能: 函数sprintf()用来作格式化的输出.用法: 此函数调用方式为int sprintf(char *string,char *format,arg ...

  5. stringstream字符串流

    例题详解 題目:输入的第一行有一个数字 N 代表接下來有 N 行資料,每一行資料里有不固定個數的整數(最多 20 個,每行最大 200 個字元),請你寫一個程式將每行的总和印出來. 輸入: 3 1 2 ...

  6. php中sprintf与printf函数用法区别

    下面是一个示例:四舍五入保留小数点后两位  代码如下 复制代码 <?php$num1 = 21;echo sprintf("%0.2f",$num1)."<b ...

  7. c/c++ 数字转成字符串, 字符串转成数字

    c/c++ 数字转成字符串, 字符串转成数字 ------转帖 数字转字符串: 用C++的streanstream: #include <sstream> #Include <str ...

  8. 解决CodeBlocks无法自动补全的问题

    在Deepin下安装的CB,输入printf.scanf的时候不会自动补全,这样就很难受. 解决办法是在Setting -> Editor -> Syntax highlighting - ...

  9. C/C++中字符串与数字相互转换

    数字转字符串: 用C++的streanstream: #include <sstream> #Include <string> string num2str(double i) ...

随机推荐

  1. 算法导论学习-binary search tree

    1. 概念: Binary-search tree(BST)是一颗二叉树,每个树上的节点都有<=1个父亲节点,ROOT节点没有父亲节点.同时每个树上的节点都有[0,2]个孩子节点(left ch ...

  2. poj 1144 Network【双连通分量求割点总数】

    Network Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 11042   Accepted: 5100 Descript ...

  3. hdoj 1465 不容易系列之一

    转 原文网址   http://blog.csdn.net/liwen_7/article/details/7646451 错排问题 错排问题 就是一种递推式,不过它比较著名且常用,所以要熟记! 方法 ...

  4. 抽象类Abstract的简单使用

    写了一个比较简单易懂的例子,如下图 AbstractBaseClass是抽象的基类,Class1,Class2是继承他的子类,并实现他的方法. //AbstractBaseClass.cs里的代码 p ...

  5. android_自定义布局

    1.需要实现view类 2.如果需要实现自定义属性则: 1.定义资源文件attrs---->values 2. <?xml version="1.0" encoding ...

  6. C++库研究笔记——生成一组随机数

    当试图用 srand(time(0)) rand() 生成一组随机数时发现,生成的数字很多都是「一样」的 经过测试:srand(seed); rand() 生成随机数,当seed一样时,生成的随机数相 ...

  7. HDU 3259 Wormholes

    题意:就是给你一个n,m,t   n代表有多少个点.m代表有多少个双向的边  t代表的是虫洞.如今要你判读是否还能够穿越到过去的点 虫洞的意思是给你的边是单向的,而且是负权值(输入的时候是正数) 思路 ...

  8. MyEclipse高效开发之必备快捷键技能

    学习了Java之后,使用MyEclipse开发已经有一段时间了,奈何MyEclipse的界面是英文版的,很多功能都不了解,对于那些英文,每次在调程序的时候,都需要一个一个的查,效率很是低下.于是,就想 ...

  9. quartz 报错:java.lang.classNotFoundException

    最近在做一个调度平台改造的项目,quartz在测试环境跑的是单机环境,生产上两台服务器做集群. 测试环境是ok的,生产上线后报错,一个类java.lang.classNotFoundException ...

  10. phpcms 源码分析四: 数据库类实现

    这次是逆雪寒的数据库类分析: <?php /* 这个讲 phpcms 的数据库类 和 phpcms 的文本缓存的实现.看了看 都是很简单的东西.大家看着我注释慢慢看吧.慢慢理解,最好能装了PHP ...