华为历年机试试题【part4】

时间:2021-02-14 18:52:17

一、手机号码合法性判断

题目简介:

我国大陆运营商的手机号码标准格式为:国家码+手机号码,例如:8613912345678。特点如下:

1、 长度13位;

2、 以86的国家码打头;

3、 手机号码的每一位都是数字。

请实现手机号码合法性判断的函数要求:

1) 如果手机号码合法,返回0;

2) 如果手机号码长度不合法,返回1

3) 如果手机号码中包含非数字的字符,返回2;

4) 如果手机号码不是以86打头的,返回3;

【注】除成功的情况外,以上其他合法性判断的优先级依次降低。也就是说,如果判断出长度不合法,直接返回1即可,不需要再做其他合法性判断。

要求实现函数:

int s int verifyMsisdn(char* inMsisdn)

【输入】 char* inMsisdn,表示输入的手机号码字符串。

【输出】 无

【返回】 判断的结果,类型为int。

示例

输入: inMsisdn = “869123456789“

输出: 无

返回: 1

输入: inMsisdn = “88139123456789“

输出: 无

返回: 3

输入: inMsisdn = “86139123456789“

输出: 无

返回: 0

 题目解答:

我觉得唯一可能存在的问题写在代码里了,其他的没什么,不赘述。

完整代码

http://www.anycodex.com/blog/?p=249


二、将一个字符串的元音字母复制到另一个字符串,并排序

题目简介:

有一字符串,里面可能包含英文字母(大写、小写)、数字、特殊字符,现在需要实现一函数,将此字符串中的元音字母挑选出来,存入另一个字符串中,并对字符串中的字母进行从小到大的排序(小写的元音字母在前,大写的元音字母在后,依次有序)。

说明:

1、  元音字母是a,e,i,o,u,A,E,I,O,U;

2、  筛选出来的元音字母,不需要剔重。

最终输出的字符串,小写元音字母排在前面,大写元音字母排在后面,依次有序。

要求实现函数:

void sortVowel (char* input, char* output);

【输入】  char* input,表示输入的字符串

【输出】  char* output,排好序之后的元音字符串。

【返回】  无

示例

输入:char *input = “Abort!May Be Some Errors In Out System. “

输出:char *output =“aeeeooouAEIO”

题目解答:

1、将输入字符串中的元音字母全部挑出来,放入output中;

2、将output中的字符排序(本程序采用的是直接插入排序法),需要注意的是判定大小的标准发生了变化。具体标准如下:

设需要比较的两个字符分别是a, b, 

若a, b都是小写字母,则按照字母顺序来定大小,a<b<c<…….<z;

若a,b都是大写字母,则按照字母顺序来定大小,A<B<C<…..Z;

若a,b一个大写,一个小写,则大写比小写大。

完整代码

http://www.anycodex.com/blog/?p=253


三、身份证的合法性判断

做不动了,真正考试,如果能做对两道,那。。。。也过了,不追求太多。休息一会儿。

关于前面两道题,我都有一个困惑和不确定的地方,那就是在未知字符串长度情况下,输入char*型的字符串该怎么办?我知道在c++里面string可以不知道长度,但是对于上面两道题,入口参数为char*,而string又没办法转成char*,困惑。。。。。求大神解答!祝明天考试的同学都能顺利通过考试!!!耶耶耶!!!!