您的位置:首页 > 编程语言 > C语言/C++

c++ 强大的字符串流处理

2016-12-24 22:46 253 查看
      本文着重介绍 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() 获得。

            暂时写到这里,持续更新中。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息