bool isnumber(char a)
{
int value=a-'0';
if(value>=0&&value<=9)
return true;
else
return false;
}
bool isinterger(char *s)//判断是否为带符号整数
{//小数点左边部分不能为空
//第一位可以为符号
//除符号外必须有数字
int i=0;
int len=strlen(s);
int flag=0;
if(len==0)
return false;
if(s[0]=='+'||s[0]=='-')
flag=1;
if(flag==1&&len==1)
return false;
if(flag!=1&&!isnumber(s[0]))
return false;
for(i=1;i<len;i++)
{
if(!isnumber(s[i]))
return false;
}
return true;
}
bool isuninterger(char *s)//判断是否是无符号整数
{
int i=0;
int len=strlen(s);
if(len==0)
return true;
for(i=0;i<len;i++)
{
if(!isnumber(s[i]))
return false;
}
return true;
}
int isfirst(char*s,char a)
{
int i=0;
int len=strlen(s);
for(i=0;i<len;i++)
{
if(s[i]==a)
return i;
}
return -1;
}
bool isfloat(char *s)
{
int index=0;
int len=strlen(s);
char *left=(char*)malloc(sizeof(char)*10000);
char *right=(char*)malloc(sizeof(char)*10000);
int flag1=0;
int flag2=0;
if(!strchr(s,'.'))
return false;
index=isfirst(s,'.');//获取到.的位置
printf("index=%d ",index);
if(index!=0)
{
strncpy(left, s, index);
left[index]='\0';
}
else
flag1=1;
if(index!=len-1)
{
strncpy(right, s+(index+1),len-(index+1));
right[len-(index+1)]='\0';
}
else
{
printf("****");
flag2=1;
}
if(flag1==1&&flag2==1)
return false;
if((strlen(left)==1&&(left[0]=='+'||left[0]=='-'))&&flag2==1)
return false;
printf("flag1==1 %d\n",flag1==1);
printf("isinterger(left)%d\n",isinterger(left));
printf("flag2==1%d\n",flag2==1);
printf("isuninterger(right)%d\n",isuninterger(right));
printf("%s\n",right);
if((strlen(left)==1)&&(left[0]=='+'||left[0]=='-')&&isuninterger(right))
return true;
if((flag1==1||isinterger(left))&&(flag2==1||isuninterger(right)))
{
printf("right\n");
return true;
}
return false;
}
bool contain_e(char*s)
{
int index=0;
char *left=(char*)malloc(sizeof(char)*10000);
char *right=(char*)malloc(sizeof(char)*10000);
int len=strlen(s);
if(!strchr(s,'e'))//不包含e
return false;
index=isfirst(s,'e');//获取到e的位置
if(index==0||index==len-1)//e不能出现在开头或者结尾
return false;
strncpy(left, s, index);
left[index]='\0';
strncpy(right, s+(index+1),len-(index+1));
right[len-(index+1)]='\0';
if((isinterger(left)||isfloat(left))&&isinterger(right))
{
printf("right\n");
return true;
}
return false;
}
char* removekongge(char *s)
{
char* answer=(char*)malloc(sizeof(char)*10000);
int len=strlen(s);
int i=0,j=0;
int index1=0;
int index2=0;
for(i=0;i<len;i++)
if(s[i]!=' ')
{
index1=i;
break;
}
for(i=len-1;i>=0;i--)
{
if(s[i]!=' ')
{
index2=i;
break;
}
}
strncpy(answer, s+index1, index2-index1+1);
answer[index2-index1+1]='\0';
return answer;
}
bool isNumber(char * s)
{
//计算字符串s的(unsigned int型)长度,不包括'\0'在内
int len=strlen(s);
if(len==0)//空字符串
return false;
s=removekongge(s);
printf("\"%s\"",s);
int i=0 ;
len=strlen(s);//计算字符串长度
if(len==1&&!isnumber(s[0]))//如果字符串有一位的话只能是数字
return false;
// if(!(s[0]=='+'||s[0]=='-'||((s[0]-'0')>=0&&(s[0]-'0')<=9)))//第一位只能是符号或者数字
// return false;
//C标准库中的strchr函数返回字符c在字符串s的位置
//C语言有atoi、atol、atof等库函数,可分别把ASCII编码的字符串转化为int、long、float类型的数字
//char *strncpy(char *dest, const char *src, int n),表示把src所指向的字符串中以src地址
//开始的前n个字节复制到dest所指的数组中,并返回被复制后的dest。
if(contain_e(s))//如果该数字包含e
return true;
else if(isfloat(s))//如果该数字包含.
return true;
else if(isinterger(s))//纯整数
return true;
return false;
}
leetcode65-有效数字
最新推荐文章于 2023-01-10 17:26:38 发布