首页 > 其他分享 >西农OJ P1491 城市电话号码

西农OJ P1491 城市电话号码

时间:2023-08-20 16:22:24浏览次数:40  
标签:P1491 西农 num OJ 号码 int char code 前缀

题目描述

某城市电话号码包括地区码、前缀、有效号码三部分组成,其中地区码是0-4位数字;前缀是以非0开头的3位数字,有效号码是4位数字,各部分之间用减号(-)分隔,地区码为空时地区码与前缀之间不包含分隔符。请编写函数检测输入号码num的有效性,若输入号码符合上述规定返回0,否则返回1。函数

原型定义如下:

int CheckPhoneNum(char * num);

输入

地区码-前缀-有效号码

地区码是0-4位数字,地区码为空时地区码与前缀之间不包含分隔符

前缀是以非0开头的3位数字

有效号码是4位数字

题解

思路

由题可知,号码有两种类型. 有地区码无地区码. 区别方式是判断有几个分隔符.

先判断号码类型,再判断是否合法.

代码

#include<stdio.h>

int numType(char *num); // 判断号码类型
int code1(char *code); // 判断地区码是否合法
int code2(char *code); // 判断前缀是否合法
int code3(char *code); // 判断有效号码是否合法

int CheckPhoneNum(char *num);

int main(){
    char phoneNumber[100];
    scanf("%s",phoneNumber);
    printf("%d\n",CheckPhoneNum(phoneNumber));
    return 0;
}

// 判断号码类型
int numType(char *num){
    int cnt = 0;
    int i = 0;
    while(1){
        if(num[i++]=='-'){
            cnt++;
        }
        if(num[i]=='\0'){
            break;
        }
    }
    if(cnt==2){
        return 1;
    }else{
        return 0;
    }
}

// 判断地区码是否合法
int code1(char *code){
    int cnt = 0,i = 0;
    while(1){
        if(code[i] >= '0' && code[i] <= '9'){
            i++;
            cnt++;
        }else{
            return 0;
        }
        if(code[i] == '\0'){
            break;
        }
    }
    if(cnt <= 4){
        return 1;
    }else{
        return 0;
    }
}

// 判断前缀是否合法
int code2(char *code){
    if(code[0]=='0') return 0;
    int cnt = 0,i = 0;
    while(1){
        if(code[i] >= '0' && code[i] <= '9'){
            i++;
            cnt++;
        }else{
            return 0;
        }
        if(code[i] == '\0'){
            break;
        }
    }
    if(cnt == 3){
        return 1;
    }else{
        return 0;
    }
}

// 判断有效号码是否合法
int code3(char *code){
    int cnt = 0,i = 0;
    while(1){
        if(code[i] >= '0' && code[i] <= '9'){
            i++;
            cnt++;
        }else{
            return 0;
        }
        if(code[i] == '\0'){
            break;
        }
    }
    if(cnt == 4){
        return 1;
    }else{
        return 0;
    }
}

int CheckPhoneNum(char *num){
    int res = 0; // 结果
    int i = 0; // num位置指针
    int j = 0; // code位置指针
    char code[100]; // 存放代码
    if(numType(num) == 1){ // 如果有地区码
        while(1){ // 获取地区码
            if(num[i] == '-' || num[i] == '\0'){
                i++;
                code[j++] = '\0'; // code截止
                j = 0; // 归位code位置指针
                break;
            }
            code[j++] = num[i++];
        }
        res = code1(code);
        if(res == 0){
            return 1;
        }
    }
    while(1){ // 获取前缀
        if(num[i] == '-' || num[i] == '\0'){
            i++;
            code[j++] = '\0'; // code截止
            j = 0; // 归位code位置指针
            break;
        }
        code[j++] = num[i++];
    }
    res = code2(code);
    if(res == 0){
        return 1;
    }
    while(1){ // 获取有效号码
        if(num[i] == '-' || num[i] == '\0'){
            i++;
            code[j++] = '\0'; // code截止
            j = 0; // 归位code位置指针
            break;
        }
        code[j++] = num[i++];
    }
    res = code3(code);
    if(res == 0){
        return 1;
    }
    return 0;
}

标签:P1491,西农,num,OJ,号码,int,char,code,前缀
From: https://www.cnblogs.com/orzmiku/p/17644163.html

相关文章

  • 8-20|https://gitlab.xx.com/api/v4/projects/4/trigger/pipeline Request failed 状
    当你使用GitLabAPI并收到状态码400,这通常意味着你发送的请求是“坏的”或格式不正确。以下是一些建议,帮助你解决问题:1.**验证请求正文**:确保你提供的请求正文(如果有的话)是正确的并符合API的预期格式。对于触发管道的API,你可能需要提供有关分支、变量等的信息。2.**检查URL*......
  • [HZOJ普及模拟2]
    \(\Huge\color{7ff77f}{打了一场模拟赛,又垫底了。qwq}\)\(\Huge\color{12f4ff}{快}\)\(\Huge\color{f9f98f}{V}\)\(\Huge\color{ff1256}{本}\)\(\Huge\color{ff4514}{蒟}\)\(\Huge\color{7ffff7}{蒻}\)\(\Huge\color{3f3f3f}{5}\)\(\Huge\color{f54321......
  • [转]By not providing "FindEigen3.cmake" in CMAKE_MODULE_PATH this project has
    在编译安装的时候出现如下问题,是Eigen3的Cmake依赖问题,已经安装eigen3,但在项目的find_package(Eigen3QUERIED)中,无法找到FindEigen3.Cmake. CMakeErroratloam_velodyne/CMakeLists.txt:13(find_package):Bynotproviding"FindEigen3.cmake"inCMAKE_MODULE_......
  • QOJ # 6504. Flower's Land 2
    题面传送门感觉,非常高妙的随机化!考虑怎么判定一个序列合法,将每种颜色的奇数位置看成左括号,偶数位置看成右括号,则一个序列合法当且仅当其括号序列合法。现在带修,我们维护的东西需要满足如下性质:可逆:将相邻奇数位的信息和偶数位的信息合并需要等于单位元。有结合律:不然没有办......
  • protojson简介
    google.golang.org/protobuf/encoding/protojson是Go语言中的一个库,用于处理ProtocolBuffers(protobuf)和JSON之间的转换,遵循https://protobuf.dev/programming-guides/proto3#json实现。以下是该库的一些主要功能:将protobuf消息转换为JSON格式:这是通过Marshal或Ma......
  • tfs 迁入解决方案缺少项目文件[*.csproj]
    .csproj、.vssscc没办法签入TFS怎么办?试图将VisualStudio文件上传到TeamFoundationServer中,但是签入了解决方案文件,项目文件一个都没签入,没办法,就右键,手工将文件添加到源代码管理器。但是.csproj、.vssscc并没有在VisualStudio的解决方案资源管理器中出现,怎么将......
  • 【JZOJ7839】神秘代码
    凯尔希我谢谢你lcp的题所以考虑使用$SA$或者$SAM$此处使用大佬提供的$SA$思路PartI首先我们考虑不反转怎么做这其实是一道SA板子题我们将所有的字符串全部用特殊符号隔开变成一个大字符串然后把每个点的$height$数组跑出来对于每一个点的$height$值......
  • SpringBoot操作前端传的Geojson进行空间查询
    SpringBoot操作前端传的Geojson进行空间查询项目说明:项目技术栈:SpringBoot+MybatisPlus+postgresql先上查询SQLSELECT*FROMdemoWHEREST_Intersects(geom,ST_GeomFromGeoJSON('放geojson类型数据'));表结构Controller层packagecom.itcy.postgresql.controller;importco......
  • formDataToJSON 抽丝剥茧 formData 与 Object 的转换【玩转源码】
    前言通过axios源码阅读,实现formDataToJSON抽丝剥茧formData与Object的转换,接下来详细分享整个过程。formDataToJSON抽丝剥茧formData与Object的转换FormData对象FormData对象用以将数据编译成键值对,以便用XMLHttpRequest来发送数据。FormData对象主要用于发送表单数......
  • SAP CDS view 源代码中的 $projection
    我们看到下图CDSview源代码里association条件中的$projection.在SAPCDS(CoreDataServices)中,$projection是一个特殊的关键字,用于在查询中选择特定的字段并创建一个临时视图。它可以在CDS视图的源代码中使用,以对结果集进行处理和转换。通过使用$projection,可以根据需要......