手机号码合法性判断

yunbird 2011-09-26 03:13:40
问题描述:我国大陆运营商的手机号码标准格式为:国家码+手机号码,例如:8613912345678。特点如下:
1、 长度13位;
2、 以86的国家码打头;
3、 手机号码的每一位都是数字。

请实现手机号码合法性判断的函数要求:
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
...全文
1617 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
chengwenyao18 2011-09-26
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 yunbird 的回复:]
引用 4 楼 chengwenyao18 的回复:
C/C++ code
#include <ctype.h>
#include <iostream>
using namespace std;

int verifyMsisdn(char* inMsisdn)
{
int len = strlen(inMsisdn);
cout<<len<<endl;
if (13 != le……
[/Quote]
为什么不允许用呢?安全性的考虑?还是。。。
至善者善之敌 2011-09-26
  • 打赏
  • 举报
回复
这题想考什么?实在看不懂,就是一般的逻辑程序
yunbird 2011-09-26
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 chengwenyao18 的回复:]
C/C++ code
#include <ctype.h>
#include <iostream>
using namespace std;

int verifyMsisdn(char* inMsisdn)
{
int len = strlen(inMsisdn);
cout<<len<<endl;
if (13 != len)
{
……
[/Quote]


strlen 这样的函数一般不允许用的吧
yunbird 2011-09-26
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 chengwenyao18 的回复:]
C/C++ code
#include <ctype.h>
#include <iostream>
using namespace std;

int verifyMsisdn(char* inMsisdn)
{
int len = strlen(inMsisdn);
cout<<len<<endl;
if (13 != len)
{
……
[/Quote]

我也刚写了一个

#include "iostream.h"

int verifyMsisdn(char *inMsisdn)
{
char *p;
p = &inMsisdn[0];

bool flag_notchar = false;

int i=0;
while (*p != '\0')
{
i++;
p++;
if(*p > '9')
flag_notchar = true;
}

if (i != 13)
return 1;
if (flag_notchar == true)
return 2;

p = &inMsisdn[0];
if (*p != '8' || *(++p) != '6')
return 3;

return 0;
}



void main()
{
char inMsisdn[20];
cout<<"input:\n";
cin>>inMsisdn;

int verify_result;
verify_result = verifyMsisdn(inMsisdn);

cout<<verify_result<<'\n';
}
MYMGrub 2011-09-26
  • 打赏
  • 举报
回复
华为为啥要出这种题呢??难道要和移动抢地盘??
机智的呆呆 2011-09-26
  • 打赏
  • 举报
回复
类似的问题俺第一反应就是正则表达式~~~~
chengwenyao18 2011-09-26
  • 打赏
  • 举报
回复
#include <ctype.h>
#include <iostream>
using namespace std;

int verifyMsisdn(char* inMsisdn)
{
int len = strlen(inMsisdn);
cout<<len<<endl;
if (13 != len)
{
return 1;
}

for(int i = 0; i < len; i++)
{
if(0 == isdigit(inMsisdn[i]))
{
return 2;
}
}

if(inMsisdn[0] != '8' || inMsisdn[1] != '6')
{
return 3;
}

return 0;
}

int main()
{

char *inMsisdn = "869123456789";
cout<<verifyMsisdn(inMsisdn)<<endl;

inMsisdn = "8813912345678";
cout<<verifyMsisdn(inMsisdn)<<endl;

inMsisdn = "8613912345678";
cout<<verifyMsisdn(inMsisdn)<<endl;

return 0;
}
赵4老师 2011-09-26
  • 打赏
  • 举报
回复
推荐使用RegTest软件
yunbird 2011-09-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xiaolanyu 的回复:]
华为的机试题,成都这边的?
[/Quote]

长沙的,最近两天机试,这题好像是成都的
xiaolanyu 2011-09-26
  • 打赏
  • 举报
回复
华为的机试题,成都这边的?

65,184

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧