【华为机试题解析】 华为作为全球知名的科技公司,其招聘过程中的机试题往往涉及到各种编程题目,旨在测试应聘者的逻辑思维、编程能力和基础算法掌握情况。以下是对所给机试题的详细解答: **1. 手机号码合法性判断** 这个题目要求编写一个函数`verifyMsisdn`来检查手机号码的合法性。我们需要了解手机号码的基本规则:中国大陆的手机号码以86为国家码,总长度为13位,且所有数字都是0-9之间的整数。根据题目描述,我们可以设计如下的解决方案: ```cpp #include<iostream> using namespace std; int verifyMsisdn(char* inMsisdn) { if (*inMsisdn++ != '8' || *inMsisdn++ != '6') // 检查前两位是否为86 return 3; if (*inMsisdn == '\0') // 如果只有86,长度不合法 return 13; for (int i = 0; i < 11; i++) { // 遍历剩余11位 if (*inMsisdn < '0' || *inMsisdn > '9') { // 检查是否为数字 if (*inMsisdn == '\0') // 长度不合法 return 1; else return 2; // 包含非法字符 } inMsisdn++; } if (*inMsisdn != '\0') // 长度超过13位 return 1; return 0; // 手机号码合法 } ``` 这个函数首先检查前两个字符是否为'86',如果不是,则返回3。接着,遍历剩下的11位,如果发现非数字字符,立即返回2。如果遍历结束后仍有字符,说明长度超过13位,返回1。否则,返回0表示手机号码合法。 **2. 字符串元音字母复制与排序** 这道题目要求提取字符串中的元音字母并排序。我们需要创建一个包含元音字母的数组,然后遍历输入字符串,将遇到的元音字母添加到输出字符串,并保持小写元音在前,大写元音在后的顺序。我们使用冒泡排序或其他排序算法对输出字符串进行排序。以下是可能的解决方案: ```cpp #include<iostream> #include<string> using namespace std; void sortVowel(const string& input, string& output) { const char* vowels = "aeiouAEIOU"; for (char c : input) { if (strchr(vowels, c)) // 如果是元音字母 output += c; } // 对输出字符串进行排序 for (size_t i = 0; i < output.size() - 1; i++) { for (size_t j = 0; j < output.size() - 1 - i; j++) { if (output[j] > output[j + 1]) { char temp = output[j]; output[j] = output[j + 1]; output[j + 1] = temp; } } } } ``` 这个函数首先遍历输入字符串,找到元音字母并添加到输出字符串。然后,使用简单的冒泡排序对输出字符串进行升序排序,使得小写元音字母排在大写元音字母之前。 **3. 身份证号码验证** 对于中国公民的身份证号码,我们需要检查其长度、数字部分以及第18位的校验码。身份证号码的第7~14位代表出生日期,格式为YYYYMMDD。验证代码可以如下实现: ```cpp bool isValidIDCard(const string& id) { if (id.size() != 18) // 长度错误 return false; for (size_t i = 2; i < 18; i++) { // 检查数字部分 if (id[i] < '0' || id[i] > '9') return false; } if (id[17] != 'x' && id[17] != 'X' && id[17] < '0' || id[17] > '9') // 校验码错误 return false; // 其他验证步骤,如出生日期合理性、校验码计算等 return true; } ``` 这个函数首先检查长度,然后遍历数字部分,确保都是0-9的数字。检查第18位是否为'x'、'X'或0-9的数字。更全面的验证还需要包括出生日期的有效性以及使用特定的校验算法验证整个号码的正确性,但这超出了这个简化的例子。 通过理解和解决这些题目,你可以更好地准备华为的机试,提升自己的编程技能。
- 粉丝: 0
- 资源: 2
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助