练习的几道华为往年的机试题,都不难,贴出来和大家分享下!机试只要对一道就可以通过,所以今年参加华为机试的同学压力不要太大
1、手机号码合法性判断(20分)
问题描述:我国大陆运营商的手机号码标准格式为:
国家码+手机号码,例如: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 = “86912345678“ 输出: 无 返回: 1
输入: inMsisdn = “8813912345678“ 输出: 无 返回: 3
输入: inMsisdn = “8613912345678“ 输出: 无 返回: 0
第一题很简单,几个if语句就能搞定
#include <iostream>
int verifyMsisdn(char* inMsisdn);
int main()
{
//char num[20]= "869123456789"; //返回1
//char num[20]= "8813912345678"; //返回3
//char num[20]= "8613912345678"; //返回0
char num[20]= "869123456+_78"; //返回2
int res = verifyMsisdn(num);
std::cout << res;
system("pause");
return 0;
}
int verifyMsisdn(char* inMsisdn)
{
int i = 0;
if(strlen(inMsisdn) != 13) //检查手机号长度是否为13,
return 1; //若不是,返回1
// std::cout << strlen(inMsisdn) << std::endl;
if(inMsisdn[0] != '8' && inMsisdn[1] != '6') //检查前两位是否为86
return 3; //若不是,返回3
for(i = 0; i < 13;i++) //检查号码是否有非数字字符
{
if(inMsisdn[i] >= '0' && inMsisdn[9] <= '9')
{
return 0; //若没有,返回0
}else
return 2; //若有,返回2
}
}
第二题也很简单,涉及到了排序,我使用了冒泡排序方法
2. 将一个字符串的元音字母复制到另一个字符串,并排序(30分)
问题描述:有一字符串,里面可能包含英文字母(大写、小写)、数字、特殊字符,现在需要实现一函数,
将此字符串中的元音字母挑选出来,存入另一个字符串中,并对字符串中的字母进行从小到大的排序。
(小写的元音字母在前,大写的元音字母在后,依次有序)。
说明: 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 =“aeeeoooAEIO “
#include <iostream>
void sortVowel (char* input, char* output);
int main()
{
char arr[] = "Abort!May Be Some Errors In Out System. ";
char out[100];
sortVowel (arr, out);
std::cout << arr << '\n' << out << std::endl;
system("pause");
return 0;
}
void sortVowel (char* input, char* output)
{
int i = 0,j = 0,k = 0;
char up[100]; //存放大写元音字母
char low[200]; //存放小写元音字母
for(i = 0;i < strlen(input);i++)
{
if(input[i] >= 'a' && input[i] <= 'z') //若字符为小写字母
{
switch(input[i]) //则找出小写元音字母并放入low数组
{
case 'a': low[j++] = input[i];
break;
case 'e': low[j++] = input[i];
break;
case 'i': low[j++] = input[i];
break;
case 'o': low[j++] = input[i];
break;
case 'u': low[j++] = input[i];
break;
default:
break;
}
}else if(input[i] >= 'A' && input[i] <= 'Z') //若字符为大写字母
{
switch(input[i]) //则找出大写元音字母并放入up数组
{
case 'A': up[k++] = input[i];
break;
case 'E': up[k++] = input[i];
break;
case 'I': up[k++] = input[i];
break;
case 'O': up[k++] = input[i];
break;
case 'U': up[k++] = input[i];
break;
default:
break;
}
}
}
low[j] = '\0'; //分别给两个数组末尾添加空字符
up[k] = '\0';
int n = 0;
char temp;
for(i = 1;i < j;i++) //对小写元音字母进行从小到大排序
for(n = 0;n < j - 1;n++)
{
if(low[n] > low[n + 1])
{
temp = low[n];
low[n] = low[n + 1];
low[n + 1] = temp;
}
}
for(i = 1;i < k;i++) //对大写元音字母进行从小到大排序
for(n = 0;n < k - 1;n++)
{
if(up[n] > up[n + 1])
{
temp = up[n];
up[n] = up[n + 1];
up[n+1] = temp;
}
}
strcat(low,up); //将up的字符串添加到low的末尾
for(i = 0;i < strlen(low) + 1;i++) //将处理好的字符串赋予output
output[i] = low[i];
}
周五了!大家也别光顾着忙,好好享受一下周末,睡个懒觉,出去走走,和朋友聚聚,有条件的记得多陪陪家人哦~