posts - 311, comments - 0, trackbacks - 0, articles - 0
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

(搬运工)中文折行函数

Posted on 2010-11-01 14:47 点点滴滴 阅读(355) 评论(0)  编辑 收藏 引用 所属分类: 03 编程工具
待研究
void GetLines(StringVector& lines, const String& str, int iLineLength ) 
{
    
int iLength ; //字符串总长度
    BOOL isFirstDBCS ; //是否是汉字的第一个字节
    int iLineStart ;//每行字符串在str中的开始位子
    int iLineEnd ;//每行字符串在str中的结束位子
    String sTemp ;
    
int iLineIndex ;
    isFirstDBCS 
= FALSE ;//初始化为不是,这样遇到第一个汉字时就可以把第一个字节设置成TRUE第二个设置成FALSE
    iLength = 0 ;
    iLineEnd 
= 0 ;
    iLineStart 
= 0 ;
    iLineIndex 
= 0 ;
    iLength 
= str.length() ;
    
if ( iLength <= iLineLength )
    {
        lines.push_back( str ) ;
        
return ;
    }
    
forint i=0; i< iLength; i++ )
    {
        iLineIndex 
++ ;
        
if( IsDBCSLeadByte( str[i] ) )
        {
            
if ( isFirstDBCS )
                isFirstDBCS 
= FALSE ;
            
else
                isFirstDBCS 
= TRUE ;
        }
        
if ( iLineIndex >= iLineLength )
        {
//该换行了
            if ( isFirstDBCS )
            {
//此位置是一个汉字的第一个字节
                iLineEnd = i - 1 ;//此行显示到前一个字节,这个汉字在下一行显示
            }
            
else
                iLineEnd 
= i ;
            sTemp 
= str.substr(iLineStart, ( iLineEnd-iLineStart + 1));
            lines.push_back( sTemp );
            sTemp 
= str.substr(iLineEnd + 1);
            GetLines( lines,sTemp, iLineLength ) ;
            
break ;
        }
    }
}