PTA prog4车牌限行问题

输入一行字符表示车牌号码,五位,只允许是0~9数字或大写英文字母,至少一位数字。
以下几种情况输出“非法输入”:
输入超过五位字符;
没有出现数字;
3)出现其他字符。
若最后一个出现的数字为奇数,输出“限行” ;否则输出“通行” 。

仅供参考!谢谢!

img

img

img

#include <stdio.h>
#include <ctype.h>
#include <string.h>

int main(int argc, char *argv[])
{
    char s[128];
    int n, len, flag;
    scanf("%s", s);
    len = strlen(s);
    n = strcspn(s, "0123456789");
    flag = strspn(s, "ABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890");
    if (len > 5 || len == n)
        puts("非法输入!");
    else if (flag == len && len == 5 && ((n > 0 && n < len)||isdigit(s[0])))
    {
        if (isdigit(s[4]) && s[4] % 2 != 0)
            puts("限行!");
        else
            puts("通行!");
    }
    else
        puts("输入无效!");
        
    return 0;
}

可以用一个字符数组存储从输入获取的一个车牌号码字符串,然后遍历这个字符数组,依次判断题目要求的各个要求是否满足,然后打印相应的提示信息即可,下面是一个实现,供参考:

参考链接:


https://www.runoob.com/w3cnote/ascii.html

#include <stdio.h>
#include <string.h> //为strlen()函数提供函数原型 

int main(void){
    
    char number[10];
    printf("请输入一个车牌号码(五位):");
    gets(number);
    
    //车牌号码超过五位字符 
    if(strlen(number)>5){
        printf("非法输入");
        return 0;
    } 
    
    int nums=0,i=0;
    while(number[i]!='\0'&&i<5){
        //   https://www.cnblogs.com/HZL2017/p/15113755.html
        //  https://www.runoob.com/w3cnote/ascii.html
        //计算数字的个数 
        if(number[i]>='0'&&number[i]<='9'){
            nums++;
        }
        
        //出现数字或字母=之外的其他字符 
        if(number[i]<'0'||(number[i]>'9'&&number[i]<'A')||(number[i]>'Z'&&number[i]<'a')||number[i]>'z'){
            printf("非法输入");
            return 0;
        }
        i++;
    }
    
    //数字的个数为0 
    if(nums==0){
        printf("非法输入");
        return 0;
    } 
    
    int lastNumber=number[4]-'0'; 
    
    

    if((number[4]>='0'&&number[4]<='9')&&lastNumber%2!=0){  //车牌号码最后一位为奇数,输出“限行” 
        printf("限行");
    } else{  //否则输出“通行” 
        printf("通行"); 
    }
    
    return 0;
    
    
} 

img