华为笔试题:字符串字母转换与查找整数相同部分

5星 · 超过95%的资源 需积分: 46 118 下载量 165 浏览量 更新于2024-07-25 收藏 209KB DOC 举报
"这份资料包含了两道华为上机笔试题,分别是字符串字母转换和检查整数中是否有相同部分。题目提供了示例代码,但没有完整的答案。" 在华为的上机笔试中,第一道题目要求编写一个`Stringchang`函数,功能是将输入字符串中的每个字母转换为其后的字母,遵循字母表的循环规则,即`z`和`Z`分别变为`a`和`A`。给出的代码示例中,函数接受两个参数:一个输入字符串`input`和一个输出字符串`output`。代码使用了`assert`来确保输入字符串不为空,然后遍历输入字符串的每个字符,根据字母表规则进行转换,并将结果存储到输出字符串中。然而,代码中并未处理空指针的情况,这是需要注意的一点。 在实际编程中,处理空指针通常很重要,因为未初始化或无效的指针可能导致程序崩溃。可以考虑在函数开始时增加一个条件判断,如果输入指针为空,则直接返回错误信息或抛出异常。例如: ```c if (input == NULL || output == NULL) { printf("ERROR: 输入或输出指针为空"); return; } ``` 第二道题目是`intsame`函数,用于检查一个整数`num`中是否存在长度至少为2的重复子序列。首先,将整数转换为字符数组`a`,然后进行逆序操作,以便进行后续的比较。这里给出的代码只完成了数组的反转,并未完成实际的检查逻辑。要实现这个功能,可以在数组反转后,使用双指针法,一个指针从数组前端开始,另一个指针从数组后端开始,依次比较两者指向的数字是否相等,若相等则继续向前搜索,直到找到不匹配的数字或达到指定长度,然后移动指针并继续比较。若在整个过程中都找到了匹配的连续数字,那么返回1,否则返回0。 ```c // 完整的intsame函数实现 int same(int num) { char a[11]; int i = 0, m = 0, j = 0; // 转换整数为字符数组 while (num) { a[i] = num % 10 + '0'; num = num / 10; i++; } // 反转数组 for (j = 0; j < i / 2; j++) { char temp = a[j]; a[j] = a[i - j - 1]; a[i - j - 1] = temp; } // 检查是否存在相同子序列 for (i = 0; i <= i - 2; i++) { for (j = i + 1; j <= i + 1 && j < i + 2; j++) { if (a[i] != a[j]) { break; } } if (j == i + 2) { m = 1; break; } } return m; } ``` 这两道题目考察了基本的字符串操作、字符与数字的转换以及数组处理能力,都是在编程面试中常见的基础题目。对于想要进入华为工作的求职者来说,熟练掌握这些基础知识是必要的。