2017华为校招C++上机题:字母转换与数字重复检测

2星 需积分: 31 97 下载量 109 浏览量 更新于2024-07-20 收藏 2.44MB PDF 举报
"这篇资料是关于2017年华为公司校园招聘的上机测试题,主要涉及C和C++编程语言。题目包括对字符串处理和整数分析两个方面,旨在考察应聘者的编程基础和逻辑思维能力。" 在第一道题目中,要求编写一个名为`stringchang`的函数,该函数接受一个输入字符串`input`,并将其内部的字母替换为其后的字母,同时保持非字母字符不变。对于字母`z`和`Z`,它们分别应被替换为`a`和`A`。实现这个功能时,可以遍历输入字符串,利用`isalpha()`函数检查每个字符是否为字母。如果是,就进行相应的字母转换;如果不是,直接保留原样。最后,别忘了在输出字符串末尾添加终止符`\0`。 ```cpp void stringchang(const char* input, char* output) { int m = strlen(input), n = 0; for (int i = 0; i < m; i++) { if (isalpha(input[i])) { if (input[i] == 'z') output[n++] = 'a'; else if (input[i] == 'Z') output[n++] = 'A'; else output[n++] = input[i] + 1; } else output[n++] = input[i]; } output[n] = '\0'; } ``` 第二道题目要求编写`same`函数,用于检测一个整数`num`中是否存在重复的连续数字序列(至少两位)。实现方法是首先将整数转化为字符数组,然后逐个比较数组中的相邻数字,查找是否有相同的序列。如果找到,则返回1,表示存在重复部分;否则,返回0。 ```cpp intsame(int num) { int n[10], n1 = 0, c = 0, i1, j1; while (num > 0) { n[n1++] = num % 10; num /= 10; } for (i1 = 0; i1 < n1 - 1; i1++) { for (j1 = i1 + 1; j1 < n1; j1++) { if (n[i1] == n[j1]) { // 如果找到相同的数字 // 检查是否为连续的序列 int seqCount = 2; while (j1 + seqCount < n1 && n[i1] == n[j1 + seqCount]) { seqCount++; } if (seqCount >= 2) { // 至少两位的连续重复 return 1; } } } } return 0; } ``` 这两道题目考察了C/C++程序员的基本技能,包括字符串操作、字符判断、循环控制以及数组处理等,这些都是编程面试中常见的考点。解决这些问题有助于提升对基本数据结构和算法的理解,以及在实际编程环境中的应用能力。