检查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(字符序列)包含小数点。