嵌入式软件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相关文章:
嵌入式软件C语言面试常见问题及答案解析(三)
嵌入式软件C语言面试常见问题及答案解析(三) 上一篇已经足够长了,再长也就有点不礼貌了,所以在这儿继续来总结分享那个面试中遇到的题目,文中的问题和提供的答案或者代码均代表个人的理解,如有不合理或者错误的地方,欢迎大家批评指正。 本文中题目列表 1. 编码实现子串定…...
nvm安装教程
Node Version Manager (NVM) 是一个用来管理多个 Node.js 版本的命令行工具。使用 NVM,你可以在同一台机器上轻松安装和切换不同的 Node.js 版本。以下是针对 Unix 类系统(如 Linux 和 macOS)的 NVM 安装教程: 安装 NVM 更新系统…...
单片机-定时器中断
1、相关知识 振荡周期1/12us; //振荡周期又称 S周期或时钟周期(晶振周期或外加振荡周期)。 状态周期1/6us; 机器周期1us; 指令周期1~4us; ①51单片机有两组定时器/计数器,因为既可以定时,又可以计数,故称之为定时器…...
Hadoop 实战笔记(一) -- Windows 安装 Hadoop 3.x
环境准备 安装 JAVA 1.8 Java环境搭建之JDK下载及安装下载 Hadoop 3.3.5 安装包 Hadoop 下载:https://archive.apache.org/dist/hadoop/common/ 一、JAVA JDK 环境检查 二、Hadoop(HDFS)环境搭建 1. 解压安装文件 hadoop-3.3.5.tar 2. 配置环境变量 HADOOP_HO…...
AI中的神经元与权重矩阵之间的关系;神经元连接角度看行和列的意义
AI中的神经元与权重矩阵之间的关系 目录 AI中的神经元与权重矩阵之间的关系神经元连接角度看行和列的意义AI中的神经元概念 在人工智能领域,特别是神经网络中,神经元是基本的计算单元,它是对生物神经元的一种抽象模拟。就像生物神经元接收来自其他神经元的电信号,经过处理后…...
mysql、postgresql、druid链接池踩坑记录
The last packet successfully received from the server wIs 10,010 milliseconds ago. The last packet sent successfully to the server was 10,010 milliseconds ago.### The error may exist in URL mysql 链接字符串没有 &connectTimeout600000&socketTimeout6…...
NRF24L01模块STM32通信-通信初始化
目录 前言 一、IO口初始化 二、模拟SPI的基础代码 1.一些代码的宏定义 2.起始信号 3.CS,SCK,MOSI操作 4.MISO,IRQ操作 三.中间层代码 1.字节的输入和读取 2.写操作 3.读操作 四.应用层代码 1.24L01的检测 2.在main函数进行简单验证 3.24L01宏定义的代码 总结 前…...
高比例压缩:Linux 中的压缩命令与技巧
文章目录 高比例压缩:Linux 中的压缩命令与技巧1. 压缩格式的选择2. gzip 命令示例:压缩文件示例:解压文件 3. bzip2 命令示例:压缩文件示例:解压文件 4. xz 命令示例:压缩文件示例:解压文件 5.…...
LabVIEW软件Bug的定义与修改
在LabVIEW软件开发过程中,bug(程序错误或缺陷)指的是程序中导致不符合预期行为的任何问题。Bug可能是由于编码错误、逻辑漏洞、硬件兼容性问题、系统资源限制等因素引起的。它可能会导致程序崩溃、功能无法正常执行或输出结果不符合预期。理解…...
基于Springboot + vue实现的办公用品管理系统
🥂(❁◡❁)您的点赞👍➕评论📝➕收藏⭐是作者创作的最大动力🤞 💖📕🎉🔥 支持我:点赞👍收藏⭐️留言📝欢迎留言讨论 🔥🔥&…...
B+树的原理及实现
文章目录 B树的原理及实现一、引言二、B树的特性1、结构特点2、节点类型3、阶数 三、B树的Java实现1、节点实现2、B树操作2.1、搜索2.2、插入2.3、删除2.4、遍历 3、B树的Java实现示例 四、总结 B树的原理及实现 一、引言 B树是一种基于B树的树形数据结构,它在数据…...
(四)结合代码初步理解帧缓存(Frame Buffer)概念
帧缓存(Framebuffer)是图形渲染管线中的一个非常重要的概念,它用于存储渲染过程中产生的像素数据,并最终输出到显示器上。简单来说,帧缓存就是计算机图形中的“临时画布”,它储存渲染操作生成的图像数据&am…...
python注意事项:range遍历越索引现象、列表边遍历边修改出现的问题
文章目录 前言一、range遍历越索引现象QS1:遍历range(2,2)会发生什么?不会报错,但是也不会遍历到任何内容QS1:遍历range(3,2)会发生什么?不会报错,但是也不会遍历到任何内容 二、列表边遍历边修改注意事项(Java的List系…...
【C++】模板与泛型编程(三):重载与模板
16.3 重载与模板 函数模板可以被另一个模板或一个普通分模板函数重载。与往常一样,名字相同的函数必须具有不同数量或类型的参数(这样才可以完成重载)。 如果设计模板,则函数的匹配规则与普通函数的重载有所不同,具体…...
JavaScript字符串拓展:实用方法与示例全解析
一、引言:为什么要学习 JS 字符串拓展 在前端开发的世界里,JavaScript 如同基石般支撑着网页的交互与动态呈现。而字符串作为我们日常操作中最频繁接触的数据类型之一,其原生方法在面对复杂多变的业务需求时,有时难免显得捉襟见肘…...
基于html5实现音乐录音播放动画源码
源码介绍 基于html5实现音乐录音播放动画源码是一款类似Shazam的UI,点击按钮后,会变成为一个监听按钮。旁边会有音符飞入这个监听按钮,最后转换成一个音乐播放器。 效果预览 源码获取 基于html5实现音乐录音播放动画源码...
初学stm32 --- ADC模拟/数字转换器工作原理
目录 常见的ADC类型 并联比较型工作示意图 逐次逼近型工作示意图 ADC的特性参数 STM32各系列ADC的主要特性 ADC框图简介 参考电压/模拟部分电压 输入通道( F1为例) 转换序列(F1为例) 规则组和注入组执行优先级对比 规则…...
导航技术的分类
导航技术可以根据不同的分类标准进行划分,以下是从不同角度对导航技术的分类: 一、按导航信息获取原理分类 无线电导航:利用无线电波的传播特性来测定运动体的位置、速度等导航参数。常见的无线电导航系统包括罗兰-C、奥米加、台卡等。卫星…...
C++语言的函数实现
C语言中的函数实现详解 C是一种强大的编程语言,广泛应用于系统软件、游戏开发、实时物理模拟等多个领域。在C中,函数是组织和重用代码的重要工具。本文将深入探讨C中的函数实现,包括函数的定义、调用、重载、递归、作用域、内联函数和模板函…...
每日一题-两个链表的第一个公共结点
文章目录 两个链表的第一个公共结点问题描述示例说明示例 1示例 2 方法及实现方法描述代码实现 复杂度分析示例运行过程示例 1示例 2 总结备注 两个链表的第一个公共结点 问题描述 给定两个无环的单向链表,找到它们的第一个公共节点。如果没有公共节点,…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...
HTML 语义化
目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案: 语义化标签: <header>:页头<nav>:导航<main>:主要内容<article>&#x…...
【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...
MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...
Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...
Matlab | matlab常用命令总结
常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...
IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...
JS手写代码篇----使用Promise封装AJAX请求
15、使用Promise封装AJAX请求 promise就有reject和resolve了,就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...
uniapp 开发ios, xcode 提交app store connect 和 testflight内测
uniapp 中配置 配置manifest 文档:manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号:4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...
[USACO23FEB] Bakery S
题目描述 Bessie 开了一家面包店! 在她的面包店里,Bessie 有一个烤箱,可以在 t C t_C tC 的时间内生产一块饼干或在 t M t_M tM 单位时间内生产一块松糕。 ( 1 ≤ t C , t M ≤ 10 9 ) (1 \le t_C,t_M \le 10^9) (1≤tC,tM≤109)。由于空间…...
