为什么TrimRight从字符串的开头搜索?

时间:2015-03-16 08:57:42

标签: c++ mfc

当我仔细查看一些代码时,这几乎使我绊倒了,我想知道我错过了什么。

以下是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  
        ....

这种实现似乎很奇怪。从字符串的末尾搜索会不会更自然(也更快)?

1 个答案:

答案 0 :(得分:1)

我认为@Angew的评论是正确的:

  

starting at beginning (DBCS aware)

     

psz = StringTraits::CharNext( psz );

此函数必须能够正确处理多字节字符集,因此必须向前扫描才能正确识别多宽度字符。