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

      本文着重介绍 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() 获得。

            暂时写到这里,持续更新中。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值