//参数是待操作的字符串,返回值是过滤后的字符串
CString FilterString(CString str);
//要求:仅允许保留英文字母/数字/汉字,不允许有半个汉字。
//主要是我不懂如何判断汉字。我要一个可以使用的函数,不是思路。谢谢!!!!!!!!!!!!!!!!
CString FilterString(CString str);
//要求:仅允许保留英文字母/数字/汉字,不允许有半个汉字。
//主要是我不懂如何判断汉字。我要一个可以使用的函数,不是思路。谢谢!!!!!!!!!!!!!!!!
解决方案 »
- 怎么学习那些类库
- 求matlab中的conv2卷积函数用c++如何实现
- 在线等~关于VC与matlab混合编程的问题
- dll在vs2005下怎样跟踪调试 ?
- 在线程中用clistctrl显示采集的数据,当行数,列数很多,而且显示速度很快时 怎么显示个千余行后程序就自动退出了呢?
- 求FILEMON的实现原理和源代码
- 有关ADSI路径如何在VC中下传的问题,请诸位帮助!
- 再追加50分,寻求通过m_pSet->方式向数据表中增加一条记录的代码
- 《Windows 程序设计》和《Visual C++技术内幕》同时看效果怎么样?
- 在VC环境下,有没有办法创建一个大小固定的文件?
- 怎么完成CString与int的转换??
- c++和VC++的区别是什么?学VC++是否要先学好C++?
...
...
TCHAR cChar = 0;
for ( int i=0; i<str.GetLength() ; i++)
{
cChar = str[i];
if ( (cChar>='a' && cChar<'z') &&
(cChar>='A' && cChar<'Z') )
continue; if ( cChar>='0' && cChar<='9')
continue; if ( cChar & 0x80 )
{ continue; i++; }
TRACE("This characters is bad %d",cChar);
str.Del(i--);
}// 随手写的,没办法测试。
IsDBCSLeadByte(BYTE TestChar);
不过在多语言环境下最好向下面这样判断
int nLen = str.GetLength();
for ( int i=0; i < nLen; i++)
{
BYTE cChar = str[i];
if ( cChar > 0x80 )//该字节为汉字头,可用if(IsDBCSLeadByte(cChar))替代该句
{
i++
continue;
}
}
{
// char* mpBuffer = new char[str.GetLength()];
char* mpIndex = result;
// CString strResult; for (int nIndex = 0; nIndex < str.GetLength(); nIndex ++){
char c = str.GetAt(nIndex); if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9')){
*mpIndex ++ = c;
} else if (c < 0){
char temp = str[++nIndex];
if (temp < 0){
*mpIndex ++ = c;
*mpIndex ++ = temp;
}
}
} *mpIndex = '\0';// strResult.Format("%s", mpBuffer);// return strResult;
}
CString FilterString(CString str)
{
CString strTmp("");
char ichar=0;
int iLen=str.getlength();
for(int i=0;i<iLen;i++)
{
ichar=str[i];
//略去 a-z A-Z 0-9 的处理
if(ichar>0x80)
{
strTmp+=ichar;
i++
strTmp+=ichar;
}
}
return strTmp;
}
是这样吗?如果我是在UNICODE下该怎么办呢?
[\u4e00-\u9fa5]vc同样可以用正则表达式的