dyw的专栏
登录
注册
全站
当前博客
空间
博客
好友
相册
论坛
留言
用户操作
[即时聊天]
[发私信]
[加为好友]
窦永旺
ID:dyw
共
26381
次访问,排名
4755(-2)
,好友
22
人,关注者
156
人。
轻松搞定,悠闲生活!
dyw的文章
原创 32 篇
翻译 4 篇
转载 6 篇
评论 34 篇
最近评论
xiadong901:
出国留学
<br>
英国留学
<br>
美国留学
<br>
没了解过,随便看下......楼上的怎么都有做广告的.
wuyanteng1:
看下!
alei1111:
上海东芝笔记本维修地址电话
/
上海东芝笔记本花屏维修
/
上海东芝笔记……
VBFGHJ:
来看看
文章分类
Linux
(RSS)
Open Source
(RSS)
Security
(RSS)
symbian
(RSS)
Windows
(RSS)
Windows Mobile
(RSS)
娱乐(Videos, etc)
(RSS)
资料
(RSS)
收藏
相册
Yahoo Widgets
My Favorite Links
InfoQ China
(RSS)
InfoQ En
(RSS)
存档
2008年09月(1)
2008年06月(5)
2008年05月(3)
2008年04月(1)
2008年03月(3)
2007年12月(2)
2007年11月(2)
2007年10月(3)
2007年09月(11)
2007年08月(6)
2007年07月(3)
2005年10月(2)
软件项目交易
订阅我的博客
如何对const TDesC&数据类型进行Trim
收藏
新一篇: 二进制字符串数据转换为16进制数据
|
旧一篇: [YouTube] Android Demo -- An Open Source Platform from Google.com
本文介绍一个对const TDesC&数据类型进行Trim的辅助类: StringHelper 。大家可能都知道,对于可修改的描述符数据可以直接进行Trim,比如:
TDes
&
des
=
...;
des.TrimLeft();
des.TrimRight();
des.Trim();
那么,如何对const TDesC&型数据直接进行Trim呢?下面先从一位网友的提问说起。
近日,有网友提问关于const TDesC& 类型该如何实现Trim。他定义的辅助类StringHelper接口如下:
class
StringHelper
...
{
public
:
static
TPtr TrimLeft(
const
TDesC
&
aDes);
static
TPtr TrimRight(
const
TDesC
&
aDes);
static
TPtr Trim(
const
TDesC
&
aDes);
}
;
乍一看,参数类型为不可修改类型,却返回可以修改的TPtr类型。答案是无法实现。后来,该贴楼主给出自己的解答,证明能够实现。原帖链接:
http://topic.csdn.net/u/20080305/09/f62678ad-4ecd-411b-bcce-28bc3e2097cd.html
事实上,他的这个实现是有问题的。看一下他的实现代码(未贴出,见上面链接)不难发现,返回值指向一个临时对象,这是没有意义的,是错误的。这也是初学者的常见问题。
下面我将给出const TDesC&进行Trim的实现方法。首先,重新定义StringHelper的接口(StringHelper.h)为:
class
StringHelper
...
{
public
:
static
TPtrC TrimLeft(
const
TDesC
&
aDes);
static
TPtrC TrimRight(
const
TDesC
&
aDes);
static
TPtrC Trim(
const
TDesC
&
aDes);
}
;
不难发现,将返回值类型由TPtr改为TPtrC,这样更加严谨,遵循Symbian描述符语义。
实现代码如下(StringHelper.cpp):
TPtrC StringHelper::TrimLeft(
const
TDesC
&
aDes)
...
{
const
TUint16
*
p
=
aDes.Ptr();
const
TUint16
*
p2
=
aDes.Ptr()
+
aDes.Length()
-
1
;
while
((p
<=
p2)
&&
(
*
p
==
TChar(
'
'
)
||
*
p
==
TChar(
'
\t
'
)))
++
p;
return
TPtrC(p, p2
-
p
+
1
);
}
TPtrC StringHelper::TrimRight(
const
TDesC
&
aDes)
...
{
const
TUint16
*
p
=
aDes.Ptr();
const
TUint16
*
p2
=
aDes.Ptr()
+
aDes.Length()
-
1
;
while
((p
<=
p2)
&&
(
*
p2
==
TChar(
'
'
)
||
*
p2
==
TChar(
'\t
'
)))
--
p2;
return
TPtrC(p, p2
-
p
+
1
);
}
TPtrC StringHelper::Trim(
const
TDesC
&
aDes)
...
{
return
TrimRight(TrimLeft(aDes));
}
对StringHelper辅助类的测试代码片断:
TBuf
<
40
>
buf;
buf.Copy(_L(
"
hello, world.
"
));
TPtrC ptr
=
StringHelper::Trim(buf);
RDebug::Print(buf);
RDebug::Print(ptr);
buf.Copy(_L(
"
"
));
TPtrC ptr2
=
StringHelper::Trim(buf);
RDebug::Print(buf);
RDebug::Print(ptr2);
buf.Copy(_L(
""
));
TPtrC ptr3
=
StringHelper::Trim(buf);
RDebug::Print(buf);
RDebug::Print(ptr3);
上述测试代码均成功通过。
欢迎同行们参与测试、提出问题。
发表于 @
2008年03月07日 22:42:00
|
评论(
loading...
)
|
编辑
新一篇: 二进制字符串数据转换为16进制数据
|
旧一篇: [YouTube] Android Demo -- An Open Source Platform from Google.com
评论:没有评论。
发表评论
姓 名:
主 页:
校验码:
看不清,换一张
当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击
登录