CString的每个字符合法性判断问题

haojie0911 2007-02-04 04:32:38
这是在vc++6.0下,我写的一个对字符串的字符合法性的判断,
我的本意是把字符串放到一个数组里,然后给数组一个指针变量,
利用指针遍历数组里的每一个字符,看是否符合要求
/* //把字符串放到数组里
//m_strSysUser_Add_Account 是CString 变量
char SysUserAccount[32] , *ps;
ps = SysUserAccount;
strcpy( SysUserAccount,( LPCSTR )m_strSysUser_Add_Account);
//合法性判断
int i;
for ( i=0;i<m_strSysUser_Add_Account.GetLength();i++)
{
//测试用-----------------//
int result
result=( 'a' < *ps < 'z' );
//-----------------------//
if(('a'<*ps<'z')||('A'<*ps<'Z')||('0'<*ps<'9')||(*ps=='-'))
ps++;
else
{
MessageBox( "登录账号不能为特殊字符!" );
return;
}
}
*/
但是不管*ps取到的字符是什么,
result=( 'a' < *ps < 'z' );
result返回的都是1.

比如我输入'1*&Aa',不管哪个字符比较,返回的result都是1.



...全文
259 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
raymonzhao 2007-02-05
  • 打赏
  • 举报
回复
如果是这样的话,你去看看正则表达式吧。想怎么要求他都可以。哈。
lily_123567 2007-02-05
  • 打赏
  • 举报
回复
C++里这种条件表达式是不能连续写的,必须拆分成两部分,按照逻辑关系添加逻辑运算符。

如果连续写"'a'<*ps<'z'"这个式子是分两步运算的。

首先运算'a'<*ps的值,返回一个bool型的结果,bool型只有'0'(表示假)或'1'(表示真)两种结果。

第二步再用这个bool值与'z'比较,不管是0还是1都比'z'小,所以你这个表达式一直返回一个表示'真'的结果。
haojie0911 2007-02-05
  • 打赏
  • 举报
回复
快点回答啊,我等着给分结贴呢:)
haojie0911 2007-02-05
  • 打赏
  • 举报
回复
楼上解释的超清楚,辛苦了.

问题出来了,当我输入大写的时候还是有问题.
比如让这个串为AAA???????
haojie0911 2007-02-04
  • 打赏
  • 举报
回复
非常感谢abelchen!
这样做确实是可以的,可是这种写法为什么?能不能解释一下?
('a'<*ps && *ps<'z')
为什么要写成
*ps && *ps
这样呢?
abelchen 2007-02-04
  • 打赏
  • 举报
回复
不好意思,写错了
if(('a'<*ps<'z')||('A'<*ps<'Z')||('0'<*ps<'9')||(*ps=='-'))
改为
if(('a'<*ps && *ps<'z')||(('A'<*ps && *ps<'Z')||('0'<*ps && *ps<'9')||(*ps=='-'))
就行了
abelchen 2007-02-04
  • 打赏
  • 举报
回复
if(('a'<*ps<'z')||('A'<*ps<'Z')||('0'<*ps<'9')||(*ps=='-'))
改为
if(('A'<*ps && *ps<'z')||('0'<*ps && *ps<'9')||(*ps=='-'))
就行了

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧