当前位置: 首页 >> 程序设计 >> 含有汉字的字符串分行函数
 

含有汉字的字符串分行函数

作者:      来源:zz     发表时间:2008-01-18     浏览次数:      字号:    

  今天写了一个支持汉字的字符串分行函数,主要功能就是可以将一个含有汉字和字符的串根据设定分行。代码如下:

/************************************************************************/
/* iLineLength ;        每行最大长度                                    */
/* str ;                要分行的字符串                                  */
/* lines              存放每一行字符串的数组                          */
/************************************************************************/
void CTestChtolineDlg::GetLines( CStringArray &lines,CString str ,  int iLineLength )
{
 int iLength ; //字符串总长度
 BOOL isFirstDBCS ; //是否是汉字的第一个字节
 int iLineStart ;//每行字符串在str中的开始位子
 int iLineEnd ;//每行字符串在str中的结束位子
 CString sTemp ;
 int iLineIndex ;
 isFirstDBCS = FALSE ;//初始化为不是,这样遇到第一个汉字时就可以把第一个字节设置成TRUE第二个设置成FALSE
 iLength = 0 ;
 iLineEnd = 0 ;
 iLineStart = 0 ;
 iLineIndex = 0 ;
 iLength = str.GetLength() ;
 if ( iLength <= iLineLength )
 {
  lines.Add( str ) ;
  return ;
 }
 for( int 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.Empty() ;
   sTemp = str.Mid( iLineStart, ( iLineEnd-iLineStart + 1) ) ;
   lines.Add( sTemp ) ;
   sTemp = str.Mid( (iLineEnd + 1) );
   GetLines( lines,sTemp, iLineLength ) ;
   break ;
  }
 }
}

责任编辑 webmaster

 
 
 
 
 
评论更多>>
 
 
 
发表
 
姓名: QQ:
性别: MSN:
E-mail: 主页:
评分: 1 2 3 4 5
评论内容:
验证码:
  
  • 请遵守《互联网电子公告服务管理规定》及中华人民共和国其他各项有关法律法规。
  • 严禁发表危害国家安全、损害国家利益、破坏民族团结、破坏国家宗教政策、破坏社会稳定、侮辱、诽谤、教唆、淫秽等内容的评论 。
  • 用户需对自己在使用本站服务过程中的行为承担法律责任(直接或间接导致的)。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表网友个人观点,与本网站立场无关。
  •