当我仔细查看一些代码时,这几乎使我绊倒了,我想知道我错过了什么。
以下是TrimRight
的实施方式(来自VS2005 MFC):
// Remove all trailing occurrences of character 'chTarget'
CStringT& TrimRight( __in XCHAR chTarget )
{
// find beginning of trailing matches
// by starting at beginning (DBCS aware)
PCXSTR psz = GetString();
PCXSTR pszLast = NULL;
while( *psz != 0 )
{
if( *psz == chTarget )
{
if( pszLast == NULL )
{
pszLast = psz;
}
}
else
{
pszLast = NULL; // Note: any other char resets search pos
}
psz = StringTraits::CharNext( psz );
}
if( pszLast != NULL )
{
// truncate at left-most matching character
....
这种实现似乎很奇怪。从字符串的末尾搜索会不会更自然(也更快)?
答案 0 :(得分:1)
我认为@Angew的评论是正确的:
starting at beginning (DBCS aware)
psz = StringTraits::CharNext( psz );
此函数必须能够正确处理多字节字符集,因此必须向前扫描才能正确识别多宽度字符。