VC判断字符串是否为合法数字

最近在做相关的项目, 在用户输入信息时要对CEdit控件获取的字符串信息判断其是否为合法数字, 通常我们所理解的合法数字是:

1. 如果不为小数, 则字符串中应该不能包含0-9以外的其它字符, 并且按照习惯, 即使用户输入0900, 程序应该能够判断其为合法数字, 并且能够格式化为900

2. 如果为小数, 通常小数点只能在两个数字之间, 并且只能有一个小数点, 如合法的数字: 0.95, 非法数字: 13.

通过上面的两个信息我们就可以写出一个判定函数, VC6上编译通过的代码如下:

判断输入的符号是否为数字
BOOL IsLegalNumber(CString &strInput)
{
 strInput.TrimLeft();
 strInput.TrimRight();
 if(strInput.IsEmpty())
  return false;
 int len = strInput.GetLength();
 char buffer[MAX_PATH + 1] = {0};
 int len1, len2;
 //判断是否有小数点
 if(strInput.Find('.') != -1)
 {
  char bufferDot[MAX_PATH + 1] = {0};
  //匹配数字和小数点
  sscanf(strInput, "%[0-9].%[0-9]", buffer, bufferDot);
  //判断buffer和bufferDot是否为空且长度之和是否为总长度-1
  len1= strlen(buffer);
  len2 = strlen(bufferDot);
  if(len1 == 0 || len2 == 0)
   return false;
  if(len != len1 + len2 + 1)
   return false;
  //去掉整数部分最左边的0
  strInput.Format("%d.%s", atoi(buffer), bufferDot);
 }
 else
 {
  //匹配数字
  sscanf(strInput, "%[0-9]", buffer);
  len1 = strlen(buffer);
  if(len1 == 0)
   return false;
  if(len1 != len)
   return false;
  //去掉整数部分最左边的0
  strInput.Format("%d", atoi(buffer));
 }
 return true;
}

代码中最有效的方式是通过sscanf函数对输入字符串进行格式化的, 里面的sscanf(strInput, "%[0-9].%[0-9]", buffer, bufferDot);第一个%[0-9]表示从左到右查找数字strInput字符串第一个小数点位置前面部分的数字, 后面的%[0-9]表示查找小数点后面的数字.

上面的代码很容易理解, 将小数点前面的数字长度加上小数点后面的数字长度如果等于原来字符串长度-1, 说明是合法的字符串, 如果不是, 则包含非法字符.

上述代码也未经严格测试, 在以后使用过程中若发现问题, 请大家多多指出.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值