本文着重介绍 C++ stringstream 处理字符串,前提是大家对于基本的 char [] , char * , string 已经很熟悉了。
由于本人知识有限, 本文只介绍 stringstream 的两种主要用途:(1)类型转换 (2)字符串处理
(1)类型转换
也许你还习惯于使用 sprintf , itoa 之类的函数,这种C风格的函数具有一个致命的弱点:不安全性。一个不小心的失误就可能造成程序的崩溃~~~
抛砖引玉,参考博客:http://www.cppblog.com/Sandywin/archive/2016/07/16/27984.html
(2)字符串处理
一般来说,对于字符串处理,sscanf 和 sprintf 比较强大,但是,我上面已经说清楚了,它们并不安全。
枯燥的理论总是让人想睡觉,这里举个实例:
string s = "Bill_Gates.jpg 83 172 91 180";
如何从 s 中提取出 string person , int left , int right , int up , int bottom ?
直观的想法就是使用 sscanf 了,但是它既不安全也不简洁,我们此处使用 stringstream。
stringstream ss;
ss << s;
int left, right, up, down, more;
ss >> image_name >> left >> right >> up >> down >> more;
cout << "Value:" << image_name << " " << left << " " << right << " " << up << " " << down << " " << more << endl;
bool b_eof = ss.eof ( );
bool b_fail = ss.fail ( );
cout << "eof bit:" << b_eof << " fail:" << b_fail << endl;
尤其注意,如果只有 4 个数字,而我们强行读取 left , right , up , bottom , more 5个数字,则 more 为乱码,同时 stringstream ss 的 eofbit = true , failbit = true,这两个错误标记位可以通过 eof() 和 fail() 获得。
暂时写到这里,持续更新中。