6个回答
展开全部
#include <stdio.h>
#include <string.h>
// 枚举类型:自然数,整数,小数 , 未知
enum TYPE {Natural,Integer,Float,Unkonwn};
/*
一个合法的数字(包括自然数,整数,小数)的格式是:
[+-](可选) + [0个或多个数字] + [小数点](可选) + [0个或多个数字]
比如:
+1
1
-1
+3.14
3.14
-3.14
+3.
3.
-3.
+.123
.123
-.123
都是合法的数字
*/
enum TYPE check(char s[])
{
int length = strlen(s);
int start = 0 , end = length-1;
// 去开始空白字符
while(start < length && s[start]==' ' || s[start]=='\t'){start++;}
// 去结尾空白字符
while(end >=0 && s[end]==' ' || s[end]==' '){end--;}
// 是否负数标识
bool isNegative = false;
// 是否小数标识
bool isFloat = false;
// 是否有整数部分
bool hasIntegerPart = false;
// 是否有小数部分
bool hasDecimalPart = false;
for(int i = start ; i <= end ; i++)
{
if(s[i] == '-' || s[i] == '+')
{
if(i == start)
isNegative = (s[i] == '-');
else
return Unkonwn;
}
else if(s[i] == '.')
{
if(!isFloat)
isFloat = true;
else
return Unkonwn;
}
else if(s[i] >= '0' && s[i] <='9')
{
if(!isFloat)
hasIntegerPart = true;
else
hasDecimalPart = true;
}
else
{
return Unkonwn;
}
}
if(isFloat)
{
if(hasIntegerPart || hasDecimalPart)
return Float;
else
return Unkonwn;
}
else
{
if(!isNegative)
return Natural;
else
return Integer;
}
}
int main(int argc, char *argv[])
{
char s[100];
enum TYPE type;
while(1)
{
scanf("%s",s);
type = check(s);
switch(type)
{
case Natural:
printf("%s\n","Natural");
break;
case Integer:
printf("%s\n","Integer");
break;
case Float:
printf("%s\n","Float");
break;
case Unkonwn:
printf("%s\n","Unknown");
break;
}
}
return 0;
}
/*
测试数据:
+1
1
-1
+3.14
3.14
-3.14
+3.
3.
-3.
+.123
.123
-.123
*/
#include <string.h>
// 枚举类型:自然数,整数,小数 , 未知
enum TYPE {Natural,Integer,Float,Unkonwn};
/*
一个合法的数字(包括自然数,整数,小数)的格式是:
[+-](可选) + [0个或多个数字] + [小数点](可选) + [0个或多个数字]
比如:
+1
1
-1
+3.14
3.14
-3.14
+3.
3.
-3.
+.123
.123
-.123
都是合法的数字
*/
enum TYPE check(char s[])
{
int length = strlen(s);
int start = 0 , end = length-1;
// 去开始空白字符
while(start < length && s[start]==' ' || s[start]=='\t'){start++;}
// 去结尾空白字符
while(end >=0 && s[end]==' ' || s[end]==' '){end--;}
// 是否负数标识
bool isNegative = false;
// 是否小数标识
bool isFloat = false;
// 是否有整数部分
bool hasIntegerPart = false;
// 是否有小数部分
bool hasDecimalPart = false;
for(int i = start ; i <= end ; i++)
{
if(s[i] == '-' || s[i] == '+')
{
if(i == start)
isNegative = (s[i] == '-');
else
return Unkonwn;
}
else if(s[i] == '.')
{
if(!isFloat)
isFloat = true;
else
return Unkonwn;
}
else if(s[i] >= '0' && s[i] <='9')
{
if(!isFloat)
hasIntegerPart = true;
else
hasDecimalPart = true;
}
else
{
return Unkonwn;
}
}
if(isFloat)
{
if(hasIntegerPart || hasDecimalPart)
return Float;
else
return Unkonwn;
}
else
{
if(!isNegative)
return Natural;
else
return Integer;
}
}
int main(int argc, char *argv[])
{
char s[100];
enum TYPE type;
while(1)
{
scanf("%s",s);
type = check(s);
switch(type)
{
case Natural:
printf("%s\n","Natural");
break;
case Integer:
printf("%s\n","Integer");
break;
case Float:
printf("%s\n","Float");
break;
case Unkonwn:
printf("%s\n","Unknown");
break;
}
}
return 0;
}
/*
测试数据:
+1
1
-1
+3.14
3.14
-3.14
+3.
3.
-3.
+.123
.123
-.123
*/
展开全部
加个头文件<ctype.h>。里面有个函数isdigit(),判断10个10进制数字之一
追问
具体一点,举个例子
追答
#include
#include
int main()
{
char c;
c=getchar();
if(isdigit(c))
printf("输入的是数字\n");
else
printf("输入的不是数字\n");
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
通过判断ASCII码。数字0到9对应的ASCII码48到57.
如果不再这之间就是非数字。
如果不再这之间就是非数字。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
随手写了一个,下面有解释。
#include <stdio.h>
#include <string.h>
void main()
{int a,i;
char str[100];
scanf("%s",str);
a=strlen(str);
for(i=0;i<a;i++)
if (str[i]>'9' || str[i]<'0')
{printf("不是数字");
break;
}
if (i==a)
printf("是数字");
}
不太精简,先定义字符串str[100](这里也可以用指针),a是求这个字符串长度,下面就是一个循环,判断每一个字符是否是数字,只要有一个不是数字,立马跳出循环,说明不是数字;如果所有的字符判断完都是数字,那就是数字了。
#include <stdio.h>
#include <string.h>
void main()
{int a,i;
char str[100];
scanf("%s",str);
a=strlen(str);
for(i=0;i<a;i++)
if (str[i]>'9' || str[i]<'0')
{printf("不是数字");
break;
}
if (i==a)
printf("是数字");
}
不太精简,先定义字符串str[100](这里也可以用指针),a是求这个字符串长度,下面就是一个循环,判断每一个字符是否是数字,只要有一个不是数字,立马跳出循环,说明不是数字;如果所有的字符判断完都是数字,那就是数字了。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
有和函数叫 int isdigit(int c)
如果是数字的话返回一个非0值
如果是数字的话返回一个非0值
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询