为STL添加string::trim()

我对于STL中未提供string::trim()接口表示不满已经有很久了! 对比Borland的产品, 发现Borland的接口定义相当精细和精准. 在此, 提供两种方法, 以实现string::trim(). (你别告诉我你连trim()是什么都不知道吧!!)
下面这个方法十分简洁, 想必大家也看得明白, 不过由于substr()使用了copy的方式, 致使效率方面下降许多(因为存在内容的再分配问题). 这种方式, 只要是个正常人都会第一时间想到它.
// simple way in STL
void trim1(string& str)
{
string::size_type pos1 = str.find_first_not_of(' ');
string::size_type pos2 = str.find_last_not_of(' ');
str = str.substr(pos1 == string::npos ? 0 : pos1,
pos2 == string::npos ? str.length() - 1 : pos2 - pos1 + 1);
}
下面介绍个不同于正常人的方法. 虽然代码方面看上去不算很简洁, 但是效率的确不一般, 关键就在于erase().
// effecient way in STL
void trim2(string& str)
{
string::size_type pos = str.find_last_not_of(' ');
if(pos != string::npos)
{
str.erase(pos + 1);
pos = str.find_first_not_of(' ');
if(pos != string::npos) str.erase(0, pos);
}
else str.erase(str.begin(), str.end());
}
使用就更加简单了!
#include <string>
void main ()
{
string str1 = " sdfghj ";
trim1 (str1);
trim2 (str2);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值