C语言通过snprintf对字符串进行格式化,格式化前需要首先对字符串的长度预估,如果长度大于了字符数组的大小,格式化字符串会被截断。

C++通过stringstream对字符串进行格式化:

#include <sstream>
#include <string>
#include <iostream>
using namespace std;int main()
{stringstream sstream;sstream << "hello, ";        //格式化字符串,输入"hello, "sstream << 88;               //格式化字符串,输入88string&& str = sstream.str();//通过str获得sstream中当前内容cout << str << endl;         //输出:hello, 88return 0;
}

可以设置字符串的格式:

#include <sstream>
#include <string>
#include <iostream>
#include <iomanip>
using namespace std;int main()
{stringstream sstream;sstream << hex << setw(4) << setfill('0') << 15;    //设置为16进制,4个字符宽,补0string&& str = sstream.str();cout << str << endl;                                //输出:000freturn 0;
}

需要注意的是stringstream的两个成员函数:str()及clear()的使用方法:

string str() const:返回stringstream对象当前内容的string对象:

stringstream sstream;
sstream << "hi";                //将字符串"hi"写入sstream
string&& str = sstream.str();   //获取sstream的内容保存在str中
cout << str << endl;            //输出:hi

void str (const string& s):通过参数s设置stringstream对象的内容

#include <sstream>
#include <string>
#include <iostream>
using namespace std;int main()
{stringstream sstream;sstream.str("hello world");    //设置sstream的内容string&& str1 = sstream.str();cout << str1 << endl;          //输出:hello worldsstream<<"hi";                 //向sstream写入字符串string&& str2 = sstream.str(); cout << str2 << endl;          //输出:hillo worldsstream.str("");               //清空sstream的内容cout<<sstream.str()<<endl;     //输出空行sstream.str("Goobye world");   //设置sstream的内容string&& str3 = sstream.str();cout << str3 << endl;          //输出:Goobye worldreturn 0;
}可见通过str可以设置stringstream的内容,也可以通过输入空字符串,清空stringstream的内容
但是需要注意的是:虽然设置了内容,但是<<操作符还是从头开始向stringstream写入,
因此str2的前两个字符被<<操作符覆盖,因此其内容变为:hillo world

clear():当通过>>操作符将stringstream的内容转换其他的类型后,stringstream对象被设置了eof标志,此时如果不通过clear()将其清除(只会清除eof标志,不会改变stringstream的内容),就不能再次通过<<操作符将其他数据写入stringstream对象:

#include <sstream>
#include <string>
#include <iostream>
using namespace std;int main()
{stringstream sstream;sstream << "hello";     //通过<<写入数据string str;sstream >> str;         //通过>>操作符将内容写入strcout << str << endl;    //输出:hellosstream.clear();        //清除eof标志sstream << 88;          //再次通过<<写入数据int data = 0;sstream >> data;        //通过>>操作符将内容写入datacout << data << endl;   //输出:88cout << sstream.str() << endl;    //输出:hello88return 0;
}

此例中因为通过>>已将数据写出,如果不调用clear操作,将无法再次通过<<写入数据。事实上,写出操作符>>完成后,会设置eof标志用于记录写出位置,通过clear将eof清除后,再次写入数据并再次写出时,会从上次标记eof的位置开始写出直到当前的eof或者换行/空格等分隔符所在的位置。

可以发现虽然clear后可以再次写入数据,但之前的数据依然存在;只是在写出的时候,已经写出的数据不会再次被写出。

如果要频繁的对stringstream对象写入写出,推荐每次clear后通过str("")将其内容也清空,以节省内存空闲

C++:stringstream格式化字符串相关推荐

  1. C++ 格式化字符串方式总结

    C++ 格式化字符串三种种方式 C-Style格式化字符串 使用 stringstream格式化字符串 使用 fmt格式化字符串 C-Style格式化字符串 格式参考函数printf的格式 // C- ...

  2. C++ format string (格式化字符串)

    为什么要单独做C++字符串格式化? C++中可以使用stringstream来格式化字符串如下: stringstream sstream; sstream << "I have ...

  3. 使用C++ ostringstream来格式化字符串输出

    在Linux C中,我们通常使用snprintf来格式化字符串输出,但是有一个问题,就是可能会频繁申请大的缓冲区,并且无法实现字符串的动态增加,比如你定义的字符缓存为100个字节,如果你格式化以后的内 ...

  4. 零基础入门学习Python(14)-格式化字符串

    什么是格式化字符串 格式化字符串就是按照统一的规格去输出一个字符串,如果规格不统一,就很可能造成误会 format()方法 接受位置参数和关键字参数两种参数 二者均传递到一个replacement的字 ...

  5. WPF中Binding使用StringFormat格式化字符串方法

    原文:WPF中Binding使用StringFormat格式化字符串方法 货币格式 <TextBlock Text="{Binding Price, StringFormat={}{0 ...

  6. python 为什么用%格式化_Python中应该使用%还是format来格式化字符串?

    原标题:Python中应该使用%还是format来格式化字符串? Python中格式化字符串目前有两种阵营:%和format,我们应该选择哪种呢? 自从Python2.6引入了format这个格式化字 ...

  7. Linux下的格式化字符串漏洞利用姿势

    [转]http://www.cnblogs.com/Ox9A82/p/5429099.html linux最早的漏洞防护机制nx-stack刚刚出现后就有人想出了突破方法.那就是只有栈是不可执行,而除 ...

  8. python转化为字符串格式_Python格式化字符串~转

    在编写程序的过程中,经常需要进行格式化输出,每次用每次查.干脆就在这里整理一下,以便索引. 格式化操作符(%) "%"是Python风格的字符串格式化操作符,非常类似C语言里的pr ...

  9. 变量与字符串的连接 - format、格式化字符串

    变量与字符串的连接 先当以如下三个变量: name='wwb' age='17' job='study' 方法一:利用+号进行连接 >>>info1='''Welcome to '' ...

最新文章

  1. Java高并发编程(七):读写锁、LockSupport、Condition
  2. 神马搜索如何提升搜索的时效性?
  3. Pytorch 自定义激活函数前向与反向传播 sigmoid
  4. 4 截图_十年漫迷舍不得删的4张截图,有大汗淋漓的香磷,满满的都是回忆
  5. ubuntu下显示文件按数字排序
  6. The /usr/local/mysql/data directory is not owned by the 'mysql' to '_mysql' user
  7. C++ (MFC)将字符串保存到指定目录下的文本中
  8. RTMP直播推流Video(视频)
  9. 各类排序算法比较分析
  10. 关于多元正态分布的条件概率密度
  11. 竞品分析 | 百词斩竞品分析报告
  12. 欧拉降幂公式模板hdu4704
  13. Linux~linux无法解析域名
  14. mysql null处理_MySQL中处理Null时要注意两大陷阱
  15. 单片机作业1_为OLED制作汉字字库_第3部分
  16. Jetpack新成员,Paging3从吐槽到真香
  17. python@内置帮助系统的使用@eval@repr@str@内置函数源代码查看
  18. 【Linux】基础常见指令
  19. python——经纬度坐标和平面投影坐标的相互转换
  20. 无人书店来了!驻守复旦大学14年的老书店,要做年轻人的打卡点

热门文章

  1. 区块链是什么,如何学习区块链技术?快速上手
  2. HTML+CSS+JS案例展示(留言板)
  3. unity制作简易播放器
  4. android studio教程离线安装findbugsieda报错,使用 FindBugs-IDEA 插件查找代码中潜在的 BUG...
  5. conceptdraw mindmap
  6. Eclipse JavaWeb 关于Servlet的部分笔记
  7. inkscape设计logo
  8. 【开源GPS追踪】 之 硬件开源
  9. php session m.jb51.net,memcached session in symfony
  10. java 中方法命名技巧