检查char*是否是0以下数字的数字

检查char*是否是0以下数字的数字,c,algorithm,C,Algorithm,我有一个函数,当char*是数字时返回true,当它不是数字时返回false 代码如下: int isNumber(char* s) { if (*s == '\0') return 0; while (*s) { if (!isdigit(*s)) return 0; s++; } return 1; } 但是当我把,例如,“-5”放进去时会发生什么呢?这是一个数字,但函数返回false。如何修改此函数?您的代码仅适用于整数 如

我有一个函数,当
char*
是数字时返回
true
,当它不是数字时返回
false

代码如下:

int isNumber(char* s) {
    if (*s == '\0') return 0;
    while (*s) {
        if (!isdigit(*s)) return 0;
        s++;
    }
    return 1;
}

但是当我把,例如,“-5”放进去时会发生什么呢?这是一个数字,但函数返回
false
。如何修改此函数?

您的代码仅适用于整数

如果数字包含一个符号或小数点,则失败

如果数字包含符号,则它必须是字符串中的第一个字符。因此,在进入while循环之前,检查字符串中的第一个字符是“+”还是“-”,如果是,则忽略while循环中的第一个字符

if (*s == '+' || *s == '-') ++s;
要扩展包含小数点的数字的代码,请添加一个标志,该标志将“.”在字符串中仅出现一次

int decimalPointFound = 0; // Decimal point not found yet
并在while循环的开头添加以下代码,该循环在检查字符是否为数字之前处理小数点

if (*s == '.')

{

    if (decimalPointFound) return 0; // Invalid number if there are more than one '.'

    decimalPointFound = 1; // Update the flag since you have found a '.'

}
我希望这能为您的功能提供一些灵活性。还有很多需要考虑的问题,如引导白点、尾随空白、指数表示、复数等。根据你的数字域,修改这个基本的代码模板。


顺便说一句,您可能有兴趣了解一些实现任务的内置功能。

'-'
不是数字。检查前导的
'+'
'-'
。在while循环之前添加行:
如果(*s=='-')s++
你也应该像处理空字符串那样:在
-
+
后面必须有一个数字。添加一个新的第一行:
如果(*s='-'| |*s='+'){s++}
来吧,这很简单,你应该能够找到你自己。如果有人给你一张纸,上面写着这样的单词:
123
-123
+123
12a
ab12
你如何判断每个单词是否是数字?在写解析数字文本时,你应该区分数字(数学实体)和数字(符号,如文本,表示数字)。例如,代码仅适用于整数是不正确的。“14.0”表示整数,但代码将拒绝它。短语“数字包含符号或小数点”是错误的,因为数字是抽象实体;它们不包含小数点。text(字符序列)包含小数点。