- 论坛徽章:
- 0
|
诸如下面的问题,诸位总是愿意自己去解析字节,鄙人认为应该让C标准库去解决这个问题,因为毕竟标准库对这个问题有标准的做法。
/*
各位,小弟有一個關於C/C++程式的問題,我想問如何把以下字串的中文字抽取出來.
"abcDEF123你好嗎HappY3",我只能把英文及數字抽出來而不能抽取中文字,謝謝.*/
我在WINNT平台下编译执行正确。参考了ISO/IEC14882:1998(E),认定是可以跨OS平台的解决方案。但是没有在UNIX环境下的实践经验,请各位指出问题,交流经验。
#include <stdio.h>;
#include <stdlib.h>;
#include <locale.h>;
//依照ISO10646标准
bool isChinese2(wchar_t ch)
{
return ch>;=0x2E80 && ch<=0x33FF || ch>;=0x3400 && ch<=0x4DFF
|| ch>;=0x4E00 && ch<=0x9FFF || ch>;=0xF900 && ch<=0xFAFF
|| ch>;=0xFB00 && ch<=0xFFFD;
}
int main()
{
const char *msg="abcDEF123你好嗎HappY3";
wchar_t buf[256],buf2[256];
char msg2[256];
int count=strlen(msg);
int i=0,j=0;
//
setlocale( LC_ALL, ".ACP" );
//
mbstowcs(buf,msg,count);
buf[count]=0;
//
j=0;
while(i<count)
{
if(isChinese2(buf))
{
buf2[j++]=buf;
}
++i;
}
buf2[j]=0;
//
j=wcstombs(msg2,buf2,256);
msg2[j]='\0';
//
printf("=>;%s\n->;%s\n",msg,msg2);
printf("=:%S\n-:%S\n",buf,buf2);
return 0;
}
输出: :em11:
=>;abcDEF123你好嗎HappY3
->;你好嗎
=:abcDEF123你好嗎HappY3
-:你好嗎
|
|