判断一个字符串是否为数字, 听起来很简单,实现还是有点难度的。 最近写了一个,如下:

#define IS_BLANK(c) ((c) == ' ' || (c) == '\t')

#define IS_DIGIT(c) ((c) >= '0' && (c) <= '9')

#define IS_ALPHA(c) ( ((c) >= 'a' && (c) <= 'z') || ((c) >= 'A' && (c) <= 'Z') )

#define IS_HEX_DIGIT(c) (((c) >= 'A' && (c) <= 'F') || ((c) >= 'a' && (c) <= 'f'))

/* Whether string s is a number.

Returns 0 for non-number, 1 for integer, 2 for hex-integer, 3 for float */

int is_number(char * s)

{

int base = 10;

char *ptr;

int type = 0;

if (s==NULL) return 0;

ptr = s;

/* skip blank */

while (IS_BLANK(*ptr)) {

ptr++;

}

/* skip sign */

if (*ptr == '-' || *ptr == '+') {

ptr++;

}

/* first char should be digit or dot*/

if (IS_DIGIT(*ptr) || ptr[0]=='.') {

if (ptr[0]!='.') {

/* handle hex numbers */

if (ptr[0] == '0' && ptr[1] && (ptr[1] == 'x' || ptr[1] == 'X')) {

type = 2;

base = 16;

ptr += 2;

}

/* Skip any leading 0s */

while (*ptr == '0') {

ptr++;

}

/* Skip digit */

while (IS_DIGIT(*ptr) || (base == 16 && IS_HEX_DIGIT(*ptr))) {

ptr++;

}

}

/* Handle dot */

if (base == 10 && *ptr && ptr[0]=='.') {

type = 3;

ptr++;

}

/* Skip digit */

while (type==3 && base == 10 && IS_DIGIT(*ptr)) {

ptr++;

}

/* if end with 0, it is number */

if (*ptr==0)

return (type>0) ? type : 1;

else

type = 0;

}

return type;

}

is_number(char *) 函数判断字符串是否为数字。如果不是,返回0。如果是整数,返回1。如果是十六进制整数,返回2. 如果是小数,返回3.

编一个测试程序:

#include

#include

int main(int argc, char**argv)

{

assert( is_number(NULL) ==0 );

assert( is_number("") ==0 );

assert( is_number("9a") ==0 );

assert( is_number("908") ==1 );

assert( is_number("-908") ==1 );

assert( is_number("+09") ==1 );

assert( is_number("-+9") ==0 );

assert( is_number(" 007") ==1 );

assert( is_number("0x9a8F") ==2 );

assert( is_number("-0xAB") ==2 );

assert( is_number("-9.380") ==3 );

assert( is_number("-0xFF.3") ==0 );

printf("test OK\n");

}

运行, "test OK"

c语言字符串不能是数字,C语言判断字符串是否为数字相关推荐

  1. python判断a是否是b的子串_python字符串a为hello,字符串b为#2#lisaend。判断字符串b中是否含有“#2#...

    展开全部 原题: 字符串a为"Hello",字符串b为"#2#Lisaend".判断字符串b中是否含有"#2#",如果有,323131333 ...

  2. python字符串转化为数字-python 中判断字符串能否转换为数字类型

    方法一: isdigit() 不可识别汉字 小数类型 str1 = "1" str2 = "2.1" str3 = "三" str4 = & ...

  3. java判断数字大小写_java判断字符串是否全部由数字,大小写字母,特殊符号组成...

    直接上代码,经过验证. package javaTest; import java.util.regex.Matcher; import java.util.regex.Pattern; public ...

  4. mysql 是否是数字_mysql 如何判断 字符串 是否为 数字

    这个问题有点怪 ,但很多时候我们会以字符串的形式存储数字 , 反过来我们用字符串进行数学运算时, 好像也不会出错 . 除非 , 用作数学运算的字符串不能转换成数字 . 但是我们改如何判断字符串是否能转 ...

  5. android 判断 string 是否是字母数字,Android中判断字符串中必须包含字母或者数字...

    public static boolean isLetterDigit(String str){ boolean isDigit = false;//定义一个boolean值,用来表示是否包含数字 b ...

  6. JAVA判断字符串以什么什么开始_字符串不能以什么开头 Java 判断字符串是否以什么开头...

    javascript怎么判断字符串是以什么开头的js中怎么判断一个字符串是以某个具体的字符串开头的? Java 判断字符串是否以什么开头 可以使用 startsWith() 判断,例如: String ...

  7. html 判断是否是数字,javascript如何判断值是否是数字?

    javascript如何判断一个值是否是数字?下面本篇文章就来给大家介绍一下使用javascript判断一个值是否是数字的方法,希望对大家有所帮助. 方法1:使用js自带的全局函数isNaN() is ...

  8. 学习-Java字符串之正则表达式之元字符之判断字符串是否符合规则

    任务描述 本关任务:接收给定的字符串,如果该字符串同时符合以下要求,请输出该字符串. 1.字符串由三个字符组成: 2.字符串以数字开头: 3.字符串以小写字母结束. 相关知识 正则表达式的概念 正则表 ...

  9. html怎样判断是不是数字,javascript如何判断值是否是数字?

    javascript如何判断一个值是否是数字?下面本篇文章就来给大家介绍一下使用javascript判断一个值是否是数字的方法,希望对大家有所帮助. 方法1:使用js自带的全局函数isNaN() is ...

  10. html 检测输入是否数字,JavaScript怎么判断输入是否是数字?

    JavaScript进行表单操作时,很多时候需要判断输入的内容是否为数字.JavaScript判断输入内容是否为数字的方法很多,下面本篇文章就来给大家介绍几种方法,希望对大家有所帮助. javascr ...

最新文章

  1. python代码示例图形-Python使用统计函数绘制简单图形实例代码
  2. c# winform实现输出数据到Console控制台窗台
  3. 高效5步走,高速搭建Hadoop2伪分布环境
  4. hdu-1565(方格取数(1))---状态压缩
  5. 【数据结构】(面试题)使用两个栈实现一个队列(详细介绍)
  6. 一个汉字在数据库占几个字节
  7. [Servletamp;JSP] 从JSP到Servlet
  8. socket连接时间太长受什么原因影响?_晶振不起振的原因和应对措施
  9. oracle PS/SQL DEVELOPER
  10. 实现OPEN 哈希表模板类
  11. GraphLite 实现子图匹配
  12. Chevereto网站存放图像至相应二级分类文件夹
  13. 20172328的结对编程四则运算第二周-整体总结
  14. 10个简单的放松运动
  15. 核磁共振测量动物脂肪、水分、瘦肉、代谢
  16. 浅谈:6sigma与Minitab_北京八方在线Minitab代理商
  17. python象棋编程_Python开发象棋小游戏(绘制棋盘)
  18. ChinaSkills-高职组网络系统管理大赛-WinSer 2019 互联网网卡检测服务笔记
  19. 图像恢复(加噪与去噪)
  20. 关于亲现实儿童游戏系统的解释

热门文章

  1. java 对象转json忽略某个属性
  2. [Windows] 【直播放映馆V9.0】Bilibili,斗鱼,虎牙,企鹅电竞,音乐电台,无广告看电影直播!...
  3. bat快捷方式启动局域网共享文件
  4. 《算法》第四版入门准备
  5. 快递鸟接口国内常用快递公司编码表
  6. 教你写Linux设备驱动程序:一个简短的教程
  7. 依码仕喷码机编程指南
  8. Vcpkg 的安装与使用
  9. 工具篇--时间转化,设置,格式
  10. 微信小程序icon控件