[C/C++]几道华为往年机试题

       练习的几道华为往年的机试题,都不难,贴出来和大家分享下!机试只要对一道就可以通过,所以今年参加华为机试的同学压力不要太大吐舌头


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];
}
       周五了!大家也别光顾着忙,好好享受一下周末,睡个懒觉,出去走走,和朋友聚聚,有条件的记得多陪陪家人哦~吐舌头



  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值