CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

关于汉字字符串的处理

楼主superbat(老刘)2001-02-07 23:00:00 在 VC/MFC / 基础类 提问

有一段字符串,有汉字和英文字符,还有标点符号。想把它们正确20个20个的分离出来(实现换行显示)而不乱码,有没有快速方法? 问题点数:150、回复次数:4Top

1 楼zhq2000(方舟)回复于 2001-02-07 23:06:00 得分 0

把串转成Unicode串,就可以20个20个取了。  
  如需要,再转成ANSI串。Top

2 楼sundayboys(sunboy)回复于 2001-02-07 23:14:00 得分 0

要想不乱码,就必须将编码统一,zhq2000说的是一个比较好的办法,windows就利用Unicode来解决双字节问题的。Top

3 楼zhq2000(方舟)回复于 2001-02-07 23:39:00 得分 90

int   MultiByteToWideChar(  
      UINT   CodePage,                   //   code   page  
      DWORD   dwFlags,                   //   character-type   options  
      LPCSTR   lpMultiByteStr,   //   string   to   map  
      int   cbMultiByte,               //   number   of   bytes   in   string  
      LPWSTR   lpWideCharStr,     //   wide-character   buffer  
      int   cchWideChar                 //   size   of   buffer  
  );  
   
   
   
  demo:  
   
  CString   str;  
  int   n=11;  
  char   szText[]   =   "1一2二3三4四5五6六7七8八9九0零";  
  str   =   szText;  
  char   szBuf[40];  
  strncpy(szBuf   ,   szText   ,   n);  
  szBuf[n]   =   '\0';  
  cout   <<   szBuf   <<   "dafa"   <<   endl;   //加上dafa或其它字符,可以看到乱码  
  cout   <<   (LPCSTR)   str.Left(n)   <<   "dafa"   <<   endl;  
   
  cout   <<   endl   <<   "Unicoded:"   <<   endl;  
   
  int   nAnsiLen   =   strlen(szText);  
   
  int   nUniLen   =   MultiByteToWideChar(CP_ACP   ,   MB_PRECOMPOSED   ,   szText   ,   nAnsiLen   ,  
  NULL   ,   0);  
   
  LPWSTR   pUnicode   =   (LPWSTR)   LocalAlloc(LPTR   ,   nUniLen);  
   
  MultiByteToWideChar(CP_ACP   ,   MB_PRECOMPOSED   ,   szText   ,   nAnsiLen   ,  
  pUnicode   ,   nUniLen);  
   
  ASSERT(pUnicode   !=   NULL);  
   
  LPWSTR   pBuf   =   (LPWSTR)   LocalAlloc(LPTR   ,   nUniLen);  
  wcsncpy(pBuf   ,   pUnicode   ,   n);  
   
  BOOL   bDefault;  
   
  ZeroMemory(&szBuf   ,   40);  
  WideCharToMultiByte(CP_ACP   ,   WC_COMPOSITECHECK   ,   pBuf   ,   n   ,  
  szBuf   ,   40   ,   NULL   ,     &bDefault   );  
  cout   <<   szBuf   <<   "dafa"     <<   endl;   //没有乱码   ok!  
   
  LocalFree(pUnicode);  
  LocalFree(pBuf);  
  Top

4 楼hello008(paladin)回复于 2001-02-07 23:52:00 得分 60

汉字字节都是大于0x0A的,只要判断大于0x0A的字节为偶数个就行了。  
   
  unsigned   char   buf[20],   buf1[20];  
  int   f_chinese   =0;  
   
  for(int   i=0;   i<20;   i++)  
  {  
      if(buf[i]   >0x0A)  
      {  
          if(f_chinese)   f_chinese   =0;  
          else   f_chinese   =1;  
      }  
      buf1[i]   =buf[i];  
  }  
  if(f_chinese   ==1)   i--;  
  buf1[i]   =0;   //   buf1中就不会有汉字被分隔开的情况了  
   
  www.programsalon.com   -   编程沙龙:大量超酷源码供您下载  
  Top

相关问题

  • 急!急!急!字符串中不能处理汉字!!散分100
  • 如何处理带有汉字的字符串了?
  • 字符串处理
  • 字符串处理!!!
  • 字符串处理
  • 字符串处理!
  • 字符串处理
  • 字符串处理,
  • 字符串处理
  • 字符串处理

关键词

  • sztext
  • szbuf

得分解答快速导航

  • 帖主:superbat
  • zhq2000
  • hello008

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo