標籤:標準庫函數
問題描述:
我國大陸電訊廠商的手機號碼標準格式為:國家碼+手機號碼,例如:8613912345678。特點如下:
1、 長度13位;
2、 以86的國家碼打頭;
3、 手機號碼的每一位都是數字。
請實現手機號碼合法性判斷的函數(註:考生無需關注手機號碼的真實性,也就是說諸如86123123456789這樣的手機號碼,我們也認為是合法的),要求:
1) 如果手機號碼合法,返回0;
2) 如果手機號碼長度不合法,返回1
3) 如果手機號碼中包含非數位字元,返回2;
4) 如果手機號碼不是以86打頭的,返回3;
【注】除成功的情況外,以上其他合法性判斷的優先順序依次降低。也就是說,如果判斷出長度不合法,直接返回1即可,不需要再做其他合法性判斷。
要求實現函數:
int verifyMsisdn(char* inMsisdn)
【輸入】 char* inMsisdn,表示輸入的手機號碼字串。
【輸出】 無
【返回】 判斷的結果,類型為int。
樣本
輸入: inMsisdn =“869123456789“
輸出: 無
返回: 1
輸入: inMsisdn =“88139123456789“
輸出: 無
返回: 3
輸入: inMsisdn =“86139123456789“
輸出: 無
返回: 0
代碼如下:自寫的
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<ctype.h>//含有isdigit庫函數int judge_phonenum(char * str){ int len=strlen(str); if(len<13) return 1;//第一判斷長度 else {//第二判斷非數字字元 for(int i=0;i<len;i++) { int flag=isdigit(str[i]); if(flag==0) return 2; } //第三判斷開頭是否為86 if(str[0]==‘8‘&&str[1]==‘6‘) return 0; else return 3; }}int main(){ char str[100]; gets(str); int result=judge_phonenum(str); printf("%d",result);}
引用了別人的代碼
#include <stdio.h>#include <string.h>int verifyMsisdn(char* inMsisdn){ int i,flag1 = 0,flag2 = 0,flag3 = 1; if(strlen(inMsisdn) == 13) flag1 = 1; if(inMsisdn[0] == ‘8‘ && inMsisdn[1] == ‘6‘) flag2 = 1; for(i=0 ; i< strlen(inMsisdn);i++) if(!(inMsisdn[i]>=‘0‘ && inMsisdn[i]<= ‘9‘)) flag3 = 0; if(flag1 && flag2 && flag3) return 0; else if(!flag1) return 1; else if(!flag3) return 2; else if(!flag2) return 3; }int main(){ char inMsisdn[20]={0}; int return_num; printf("please input the mobile num:\n"); scanf("%s",inMsisdn); return_num = verifyMsisdn(inMsisdn); printf("the return num is:%d",return_num); system("pause"); return 0;}
總結:isdigit庫函數
原型:extern int isdigit(char c);
功能:判斷字元c是否為數字
說明:當c為數字0-9時,返回非零值,否則返回零。
附加說明 此為宏定義,非真正函數。
手機號碼合法性判斷