亚信面试题解析:C++与算法挑战

3星 · 超过75%的资源 需积分: 18 29 下载量 93 浏览量 更新于2024-09-19 收藏 9KB TXT 举报
"这是一份关于亚信公司面试题目的资料,包含了指针、结构体大小计算、二分查找算法以及字符串处理等编程基础题目。" 1) 指针与结构体大小计算: 在C/C++编程语言中,结构体的大小计算可能会因为成员对齐规则而有所不同。在题目给出的例子中: a. 当结构体`s`包含一个`char`和一个`int`时,由于`int`通常为4字节,`char`为1字节,加上可能的字节对齐,`sizeof(s)`可能是8字节。 b. 如果结构体`s`先有一个`int`(4字节)后跟一个`char`(1字节),由于对齐规则,`sizeof(s)`可能是5字节,但具体值取决于编译器的对齐策略。 c. 对于整型数组`a[200]`,其大小是`200 * sizeof(int)`,假设`int`为4字节,则`sizeof(a)`应为800字节。而动态分配的指针`int*a`,`sizeof(a)`仅返回指针本身的大小,通常是4字节(对于32位系统)。 d. 在位字段结构中,每个成员占据特定的比特数,结构体总大小以字节为单位,需要考虑到字节对齐。例子中的结构体`bits`占用3个字节,因为`a`占8位,`b`占4位,`c`占2位,`d`占3位,加上1位的字节边界对齐。 2) 二分查找算法: 二分查找是一种在有序数组中查找特定元素的搜索算法。题目中给出的`bfind`函数实现了这一算法,其基本思想是每次将待查找范围减半。函数首先计算中间索引`m`,然后比较中间元素与目标值。如果中间元素大于目标值,更新右边界;如果小于目标值,更新左边界;如果相等则返回中间索引。当左边界不等于右边界且未找到目标时,返回-1表示未找到。 3) 字符串处理与子串计数: `count1`函数用于计算一个字符串(`str`)中另一个字符串(`s`)的非重叠子串数量。它通过两个指针`s1`和`s2`分别遍历`str`和`s`,在找到匹配子串时,`s2`继续向后移动直到达到子串末尾或`str`结束。若`s2`到达子串末尾,计数器加一,然后`str`指针向前移动到下一个字符。最后返回子串计数。 4) 查找子串的最后出现位置: `find`函数用于在字符串`str1`中找到子串`str2`的最后出现位置。首先计算两字符串的长度,然后从`str1`的起始位置开始,逐次检查是否可以找到完整的`str2`。如果找到,返回子串在`str1`中的开始位置,否则返回`str1`的长度,表示子串未找到。 这些题目考察了C/C++的基础知识,包括内存管理、数据结构、算法和字符串操作,这些都是成为一名合格的IT从业者必备的技能。理解和掌握这些知识点有助于在实际编程工作中解决问题和提高效率。