这是“无所畏惧”的方法
int isNumeric ( const char * str ) {
char * pch = (char*)str;
while ( pch != '\0' ) {
if ( *pch < '0' || *pch > '9' ) return 0;
pch++;
}
return 1;
}
有优雅的方式吗?
编辑:问题应标题为“数组是否只包含数字”,因为不允许使用负数和浮点数。
答案 0 :(得分:4)
以下是使用isdigit()
重写代码的一种方法,这非常有效:
int isNumeric ( const char * str )
{
while (isdigit(*str))
str++;
return (*str == '\0');
}
但是,此代码重复了代码中的缺陷。如果字符串为空,则返回true。您可以轻松插入检查以确认您没有空字符串。
答案 1 :(得分:1)
您可以使用strspn()
:
int hasNumber = strspn(str, "0123456789")
答案 2 :(得分:0)
ctype.h具有以下功能:
int isalnum(int c);
int isalpha(int c);
int isascii(int c);
int isblank(int c);
int iscntrl(int c);
int isdigit(int c);
int isgraph(int c);
int islower(int c);
int isprint(int c);
int ispunct(int c);
int isspace(int c);
int isupper(int c);
int isxdigit(int c);
答案 3 :(得分:0)
您可以使用int isdigit(int ch);
中的ctype.h
。
答案 4 :(得分:0)
是的,有:
#include <ctype.h>
#include <stdlib.h>
int isNumeric (const char * s)
{
char *p;
if (s == NULL || *s == '\0' || isspace(*s))
return 0;
strtol (s, &p, 10);
return *p == '\0';
}
如果string不表示数字,strtol
会将p
指向解析后的数字后的第一个元素,因此我们需要检查整个字符串是否解析得很长。
答案 5 :(得分:0)
您也可以这样做:
char *q = s, *p = s;
while(*p >= '0' && *p <= '9') p++;
return q != p && *p == 0;
如果通过停止非空值看到非数字,则循环结束,p == 0
检查我们是否已遍历所有字符。
查看ctype.h
,它具有本机isdigit()
宏或函数(如果你取消设置isdigit
),编译器通常会做出很好的优化,因此最好使用它。
编辑:
已添加:q != p
如果p
为NULL