嵌入式软件C语言面试常见问题及答案解析(三)

嵌入式软件C语言面试常见问题及答案解析(三)

  上一篇已经足够长了,再长也就有点不礼貌了,所以在这儿继续来总结分享那个面试中遇到的题目,文中的问题和提供的答案或者代码均代表个人的理解,如有不合理或者错误的地方,欢迎大家批评指正。

本文中题目列表

  • 1. 编码实现子串定位
  • 2. 找出两个字符串中最大公共子字符串
  • 3. 在一个字符串中找到可能的最长的子字符串,且该字符串是由同一字符组成的
  • 4. 把字符1串插入到字符串2中
  • 5. 在字符串中找出连续最长的数字串,并把这个串的长度返回
  • 6. 实现删除字符串str1中含有的字符串str2
  • 7. 写一个函数,找出被重复的数字,时间复杂度必须为O(n)
  • 8. 结构体、联合体占用内存问题
  • 9. 请写出以下数据类型与零值比较的if语句。
  • 10. 如下程序运行结果是什么。
  • 11. 使用宏(或者函数)实现两个数的交换的功能。
  • 12. 已知类String的原型如下,编写类String的构造函数,析构函数和赋值函数。
  • 13. 不用库函数,用C语言实现将一整型数字转化为字符串。
  • 14. 用指针的方法,将字符串“ABCD1234efgh”前后对调显示。
  • 15. 判断一个字符串是不是回文。


1. 编码实现子串定位

题目:编码实现子串定位,函数原型为int FindSubStr(const char *MainStr, const char *SubStr)

查找子串的位置,其功能类似与函数 strstr(),其函数原型是char *strstr(const char *haystack, const char *needle)。本文中实现的方式比较简单明了,注释也很详细。参考代码如下。

int FindSubStr(const char *MainStr, const char *SubStr)
{/* 定义位置临时变量,初始化为0,表示没找到 */int t_index = 0;char *t_main_str = MainStr;char *t_sub_str = SubStr;/* NOTE 下面这部分代码(SECTION -> !SECTION)为冗余设计,如果写上了说明你对于一些异常情况有考虑并处理的能力,算是加分项 *//* SECTION 参数判断 */if (NULL == t_main_str || NULL == t_sub_str) /* 空指针判断 */return -1;int t_main_len = strlen(MainStr);int t_sub_len = strlen(SubStr);if (t_main_len == 0 || t_sub_len == 0) /* 字符串长度判断,长度为0那就没有继续的必要了 */return -2;if (t_main_len < t_sub_len) /* 子串长度比主串长,玩呢 */return -3;/* !SECTION 参数判断 *//* 结束查找的条件,主串到结尾 */while (*t_main_str != '\0'){/* 两个字符串都没有到结为,并且 子串与主串字符相同 */while (*t_main_str && *t_sub_str && *t_main_str == *t_sub_str){/* 记录当前位置(PS:此位置不一定是最终结果,当做标识使用) */t_index = (t_main_str - MainStr) + 1;/* 移动指针 */t_main_str++;t_sub_str++;}/* 子串到结尾了(PS:说明前面的执行已经匹配到了完整的子串) */if (*t_sub_str == '\0'){/* 计算子串在主串中的开始的位置 */t_index = (t_main_str - MainStr) + 1 - (t_sub_str - SubStr);/* 跳出循环(PS:必须的)*/break;}/* 如果位置不为0,说明匹配到了一些字符,但是没有匹配完整的子串 */if (t_index != 0){/* 指针要做后退一个,不然后面的++会导致跳过一个字符 */t_main_str--;/* 当然临时的标识也要恢复 */t_index = 0;/* 重新开始匹配子串 */t_sub_str = SubStr;}/* 无条件移动主串的指针 */t_main_str++;}/* 返回位置 */return t_index;
}

2. 找出两个字符串中最大公共子字符串

题目:找出两个字符串中最大公共子字符串,如"abccade",“dgcadde"的最大子串为"cad”。

像这种只有题目要求和举例说明的题目,编码相对来说比较灵活了,但是在定义函数的时候相关参数返回值都要尽量体现其合理性的,当然只要正当的考虑即可,下面给出两种实现的方案供参考(方案二中使用malloc()函数,但是需要调用者去free,这是个坑)。

// 方案一:直接通过参数输出公共子串在任一字符串中其实位置,通过返回值输出公共子串的长度
int FindCommonStr(const char *str1, const char *str2, char **comm)
{char *t_str1 = (char *)str1;char *t_str2 = (char *)str2;char *t_common = NULL;int i = 0, j = 0, k = 0, t_len = 0, t_maxlen = 0;/* 参数判断 */if (NULL == t_str1 || NULL == t_str2 || NULL == comm){return -1;}/* 字符串中一个字符一个字符判断 */for (i = 0; t_str1[i] != '\0'; i++){/* 保存字符串1当前位置,后面需要自增 */k = i;/* 字符串中一个字符一个字符判断 */for (j = 0; t_str2[j] != '\0'; j++){/* 相同字符的长度,每次重新开始 */t_len = 0;/* 两个字符串的字符一致 */if (t_str1[k] == t_str2[j]){while ('\0' != t_str1[k] &&    /* 字符串没到结束 */'\0' != t_str2[j] &&    /* 字符串没到结束 */t_str1[k] == t_str2[j]) /* 字符一致 */{/* 指针后移 */k++;j++;/* 相同字符长度自增 */t_len++;}/* 本次相同字符长度大于记录的最大长度 */if (t_len > t_maxlen){/* 更新最大长度 */t_maxlen = t_len;/* 记录公共子串起始的位置 */t_common = &t_str1[i]; /* NOTE 如果取另一字符串的话则是:&t_str2[j - t_len]; */}}}}/* 输出公共子串 */*comm = t_common;/* 返回公共子串的长度 */return t_maxlen;
}// 方案二:通过返回值返回最大公共子串,此方案最贴近题目要求,但是需要注意的是 malloc 调用
char *FindCommonStr(const char *str1, const char *str2)
{char *t_str1 = (char *)str1;char *t_str2 = (char *)str2;int i = 0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/65460.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTML5实现好看的中秋节网页源码

HTML5实现好看的中秋节网页源码 前言一、设计来源1.1 网站首页界面1.2 登录注册界面1.3 节日由来界面1.4 节日习俗界面1.5 节日文化界面1.6 节日美食界面1.7 节日故事界面1.8 节日民谣界面1.9 联系我们界面 二、效果和源码2.1 动态效果2.2 源代码 源码下载结束语 HTML5实现好看…

ROS通信编程——服务通信

前言 学完了话题通信其实操作流程基本都已经很熟悉了&#xff0c;因此服务通讯的学习就会流畅许多。 服务通信也是ROS中一种极其常用的通信模式&#xff0c;服务通信是基于请求响应模式的&#xff0c;是一种应答机制。也即: 一个节点A向另一个节点B发送请求&#xff0c;B接收…

零基础微信小程序开发——全局配置之tabBar(保姆级教程+超详细)

&#x1f3a5; 作者简介&#xff1a; CSDN\阿里云\腾讯云\华为云开发社区优质创作者&#xff0c;专注分享大数据、Python、数据库、人工智能等领域的优质内容 &#x1f338;个人主页&#xff1a; 长风清留杨的博客 &#x1f343;形式准则&#xff1a; 无论成就大小&#xff0c;…

2024年12月HarmonyOS应用开发者高级认证全新题库

注意事项&#xff1a;切记在考试之外的设备上打开题库进行搜索&#xff0c;防止切屏三次考试自动结束&#xff0c;题目是乱序&#xff0c;每次考试&#xff0c;选项的顺序都不同&#xff0c;作者已于2024年12月15日又更新了一波题库&#xff0c;题库正确率99%&#xff01; 新版…

【网络协议】IPv4 地址分配 - 第二部分

前言 在第 1 部分中&#xff0c;我们学习了 IPv4 地址的分配方式&#xff0c;了解了各种类型的 IPv4 地址&#xff0c;并进行了基础的子网划分&#xff08;Subnetting&#xff09;。在第 2 部分中&#xff0c;我们将继续学习子网划分&#xff0c;并引入一些新的概念。 【网络…

浙江安吉成新的分布式光伏发电项目应用

摘 要&#xff1a;分布式光伏发电站是指将光伏发电组件安装在用户的建筑物屋顶、空地或其他适合的场地上&#xff0c;利用太阳能进行发电的一种可再生能源利用方式&#xff0c;与传统的大型集中式光伏电站相比&#xff0c;分布式光伏发电具有更灵活的布局、更低的建设成本和更高…

7z 安装与使用指南

文章目录 1. 安装 7z1.1 在 Linux 上安装 7z对于 Debian/Ubuntu 系统&#xff1a;对于 CentOS/RHEL 系统&#xff1a;对于 Fedora 系统&#xff1a;对于 Arch Linux 系统&#xff1a; 1.2 在 Windows 上安装 7z 2. 使用 7z 进行压缩和解压2.1 压缩文件示例&#xff1a;压缩一个…

scanf:数据之舟的摆渡人,静卧输入港湾的诗意守候

大家好啊&#xff0c;我是小象٩(๑ω๑)۶ 我的博客&#xff1a;Xiao Xiangζั͡ޓއއ 很高兴见到大家&#xff0c;希望能够和大家一起交流学习&#xff0c;共同进步。* 这一节我们主要来学习scanf的基本用法&#xff0c;了解scanf返回值&#xff0c;懂得scanf占位符和赋值…

【ROS2】Arduino系列之电机驱动实现

内容学自&#xff1a;赵虚左老师。学后总结&#xff01; 实现机器人移动的一种策略是&#xff1a;控制系统会先发布预期的车辆速度信息&#xff0c;然后驱动系统订阅到该信息&#xff0c;不断调整电机转速直至达到预期速度&#xff0c;调速过程中还需要时时获取实际速度并反馈…

119.使用AI Agent解决问题:Jenkins build Pipeline时,提示npm ERR! errno FETCH_ERROR

目录 1.Jenkins Build时的错误 2.百度文心快码AI智能体帮我解决 提问1&#xff1a;jenkins中如何配置npm的源 提问2&#xff1a;jenkins pipeline 类型为pipeline script from SCM时&#xff0c;如何配置npm源 3.最终解决方法-Jenkinsfile的修改 4.感触 1.Jenkins Build时…

常见的开源网络操作系统

常见的开源网络操作系统有很多,它们通常用于路由器、交换机、网络设备和服务器等场景,具有灵活、可定制、易于扩展的特点。以下是一些常见的开源网络操作系统: OpenWRT 用途:主要用于路由器、无线接入点和网络设备。提供了广泛的定制选项和高级功能,如防火墙配置、VPN 支持…

Java 日期时间格式化标准

文章目录 Java日期时间格式化符号ISO 8601中的日期时间ISO 8601标准的定义ISO 8601日期时间格式 周数年份ISO 8601中的周数年份Java中的周数年份 Java跨年日期格式化BUG注意事项 Java日期时间格式化符号 JDK官网截图&#xff1a; 格式化符号梳理&#xff1a; 符号描述符号用…

【2024华为OD-E卷-200分-数值同化】(题目+思路+JavaC++Python解析)

题目描述 题目名称&#xff1a;数值同化 题目背景&#xff1a; 在一个数值同化过程中&#xff0c;你需要将一组数值进行特定的处理&#xff0c;使得它们能够“同化”到一个目标值附近。具体做法是&#xff0c;给定一个数组 nums 和一个目标值 target&#xff0c;你需要对数组…

【HUAWEI】HCIP-AI-MindSpore Developer V1.0 | 结课测试

目录 一 单选 二 多选 三 判断 四 填空 一 单选 1 一张图片在存放过程中出现了很多小的噪声&#xff0c;或白或黑&#xff0c;对其扫描进行以下哪一个操作的去噪效果最好&#xff1f; A.均值滤波 B.中值滤波 C.高斯滤波 D.拉普拉斯滤波 2 以下哪个方法中使用了掩码语…

ESP32-S3模组上实现低功耗(6)

接前一篇文章:ESP32-S3模组上实现低功耗(5) 本文内容参考: 系统低功耗模式介绍 - ESP32-S3 - — ESP-IDF 编程指南 latest 文档 电源管理 - ESP32-S3 - — ESP-IDF 编程指南 latest 文档

chrome浏览器的更新提示弹窗无法更新Chrome解决方法

使用组策略编辑器 此方法适用于 Windows 系统且系统为专业版及以上版本&#xff0c;家庭版系统没有组策略功能。 按下Win R键&#xff0c;打开 “运行” 对话框&#xff0c;输入gpedit.msc并回车&#xff0c;打开组策略编辑器。 在组策略编辑器中&#xff0c;依次展开 “计算机…

高山旅游景区有效降低成本,无人机山下到山上物资吊运技术详解

在高山旅游景区&#xff0c;传统的物资运输方式往往面临人力成本高昂、效率低下等问题&#xff0c;而无人机技术的引入为这一难题提供了新的解决方案。以下是对无人机从山下到山上进行物资吊运技术的详细解析&#xff1a; 一、无人机物资吊运技术的优势 1. 降低人力成本&#…

读博生涯记录2 __ 2025.1.8 --- 关于博一上学期的一些经历和感受

时间过得好快&#xff0c;2024年8月底入学至今都快半年了。学校已经放寒假了&#xff0c;我也计划过多几天就回去&#xff0c;在这个太阳早已落山的午后&#xff0c;在这工位区的一隅&#xff0c;想着记录一下本学期我的一些经历和感受。 专业上&#xff1a;本学期我给自己的规…

Python爬虫 - 豆瓣图书数据爬取、处理与存储

文章目录 前言一、使用版本二、需求分析1. 分析要爬取的内容1.1 分析要爬取的单个图书信息1.2 爬取步骤1.2.1 爬取豆瓣图书标签分类页面1.2.2 爬取分类页面1.2.3 爬取单个图书页面 1.3 内容所在的标签定位 2. 数据用途2.1 基础分析2.2 高级分析 3. 应对反爬机制的策略3.1 使用 …

2501d,d17年前就有了编译时

D在17年前就有了编译时!D功能稳步进入其他语言. :此处的编译时关键字指示在编译时运行它前面的块. D不使用关键字来触发它.触发它的是"常 式".当然,必须在编译时可计算常式.如: int sum(int a, int b) > a b; void test() {int s sum(3, 4); //在运行时运行,e…