手机号码是一串数字,长度为11为,并且第一位必须是1,现在给出一个字符串,我们需要判断这个字符串是否符合手机格式
输入:输入是一个字符串
输出:若该字符串符合手机格式,输出1,否则输出0
样例输入
12345612345
样例输出
1
问题链接:JSK-132 判断字符串是否是手机号码
问题描述:(略)
问题分析:
编写一个函数来计算,需要注意变量类型,防止计算溢出。C语言是不做溢出检查的!
程序说明:
用C语言编写程序时,数组s[]的长度是个问题,原问题描述中没有指出输入最多多少字符,令人困惑。这就需要稍微长一点。如果用C++编写程序,使用string类声明字符串变量就简单了。
发现有非数字字符时的处理需要仔细考虑,见程序20-21行。
程序中的第12行似乎可以用scanf("%s", s)来实现,但是如果出现输入是"12345612345 abc"就有可能出现尴尬的结果。
程序中用到了头文件string.h和ctype.h,一些功能就可以直接使用库函数了。使用库函数是可靠的,自己写一个函数会不会有BUG?
参考链接:(略)
题记:尽量使用库函数。
AC的C语言程序如下:
/* JSK-132 判断字符串是否是手机号码 */
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define N 128
char s[N];
int main(void)
{
gets(s);
if(strlen(s) != 11 || s[0] != '1')
printf("0\n");
else {
int cnt = 1, i;
for(i = 1; s[i]; i++) {
if(!isdigit(s[i])) {
cnt = 0;
break;
} else
cnt++;
}
printf("%d\n", cnt == 11 ? 1 : 0);
}
return 0;
}