判断字符是否合法

#include<stdio.h>
#include<string.h>
int isten(char *p,int n){
    int i=0;
    if(p[0]!='0'){
    for(i=0;i<n;i++){
        if((p[i]-'0'>9)||(p[i]-'0'<0))return 0;
    }
    }else return 0;
    return 1;
}
int iseight(char *p,int n){
    int i=0;
    if(p[1]!='0'){
    for(i=1;i<n;i++){
        if((p[i]-'0'>7)||(p[i]-'0'<0))return 0;
    }
    }else return 0;
    return 1;
}
int issixteen(char *p,int n){
    int i=0;
    if(p[2]!=0){
    for(i=2;i<n;i++){
        if(((p[i]-'0'>9)&&(p[i]<'A'))||(p[i]-'0'<0)||((p[i]>'F')&&(p[i]<'a'))||(p[i]>'f'))return 0;
    }
    }else return 0;
    return 1;
}
int main(void){
    char str[100];
    while(scanf("%s",str)!=EOF){
        if(((str[1]=='x')||(str[1]=='X'))&&str[0]=='0'){
            if(issixteen(str,strlen(str)))printf("Yes\n");
            else{printf("No\n");}
        }else if(str[0]=='0'){
            if(iseight(str,strlen(str))){printf("Yes\n");}
            else{printf("No\n");}
        }else if((str[0]<='9')&&(str[0]>'0')){
            if(isten(str,strlen(str))){printf("Yes\n");}
            else {printf("No\n");}
        }else{printf("No\n");}
    }
return 0;
}

懒得写题目了。。大概思路很简单,先判断0x(16进制),在判断0(8进制),最后判断10进制,一个细节,进制位之后的第一个位不能为零。比如十进制的100,不能写成0100这个虽然在八进制内是对的,但是在十进制的情况下是错误的。

猜你喜欢

转载自blog.csdn.net/u014128662/article/details/79464991