#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<stdio.h>
intmain()
{
charc
c=getchar()
//来判断是否为数字,如果是数字那么会返回非0
if(is digit(c)!=0)
printf("是数字\n")
//来判断是否为字母,如果是字母那么返回非0
elseif (is alpha(c)!=0)
printf("是字母\n")
else
printf("是特殊字符\n")
}
扩展资料
输入一个字符判断其是字母字符还是数字字符
#include<stdio.h>
int main()
{
char ch
printf("Input ch:")
ch=getchar()
if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))//判断是不是字母
printf("字母\n")
else if(ch>='0'&&ch<='9')//判断是不是数字
printf("数字\n")
else
printf("其他\n")
return 0
}
不会C语言。给出几个算法,代码是fortran的,供参考。
第一种,用整数除法。对于整数a,连续用10除,直到商为零。除法的次数,即为位数。
这个算法对于正负整数和零都能获得正确的结果。
第二种,用对数函数直接计算。对a取绝对值,再计算10为底的对数,所得结果取整数部分,再加1,即为位数。由于log10函数的变量不能是整数,需要a*1.0转换为实数。又由于log10的变量不能是0,因此针对a=0的情形,通过max将其转换成1.0。
第三种,逐个数数字的个数。将a取绝对值,写入字符串,统计字符串中不为空(为数字)的字节数,即为位数。