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

news2025/1/9 11:03:44
嵌入式软件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.coloradmin.cn/o/2273749.html

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

相关文章

【江协STM32】9-1/2/3 USART串口协议、USART外设、串口发送串口发送+接收

1. 通信接口 通信的目的&#xff1a;将一个设备的数据传送到另一个设备&#xff0c;扩展硬件系统通信协议&#xff1a;制定通信的规则&#xff0c;通信双方按照协议规则进行数据收发全双工&#xff1a;指通信双方能够同时进行双向通信。发送线路和接收线路互不影响&#xff0c…

小程序租赁系统开发的优势与应用前景分析

内容概要 小程序租赁系统是一种新兴的数字化解决方案&#xff0c;旨在为用户提供更加便捷与高效的租赁服务。它通常包括一系列功能&#xff0c;如在线浏览、即时预定、支付功能以及用户反馈机制。这些系统在使用上极为友好&#xff0c;让用户能够轻松选择所需的商品或服务&…

25/1/8 算法笔记<强化学习> GYM环境

前几天花了好多时间在装各个仿真环境上&#xff0c;有V-rep,Pybullet,unity的Ml-agent,很多一大堆&#xff0c;好多好多问题差点逼疯我&#xff0c;可能就pybullet能玩一点&#xff0c;到之后学了机器人我再来玩它&#xff0c;最后的最后&#xff0c;我发现还得是我的gym&#…

学习随记:word2vec中归一化处理的作用

答案来自ai&#xff0c;直接复用为参考&#xff1a; 向量归一化的好处 将向量进行归一化&#xff0c;使其模长为 1&#xff08;即投射到单位圆/单位球上&#xff09;&#xff0c;在许多情况下具有实际意义和计算优势。以下是归一化的主要好处和原因&#xff1a; 1. 提高数值稳…

【C++】B2108 图像模糊处理

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;题目描述题目内容输入格式输出格式示例输入&#xff1a;输出&#xff1a; &#x1f4af;题目分析问题拆解 &#x1f4af;我的做法代码实现代码分析 &#x1f4af;老师的做法…

selenium+pyqt5自动化工具总结

说明&#xff1a;本工具是&#xff0c;操作外部google浏览器、selenium是无法操作qt界面中嵌套的浏览器的&#xff0c; 工具在后面 1. 代码结构 pycharm打开的文件下&#xff0c;再写一个子文件&#xff0c;文件导入的时候把子文件名带上 这样就可以在 外层使用命令 pyinst…

经典多模态模型CLIP - 直观且详尽的解释

对比语言-图像预训练&#xff08;CLIP&#xff09;&#xff0c;这是一种创新的多模态建模策略&#xff0c;能够创建视觉和语言的联合表示。CLIP 的效果非常出色&#xff0c;可以用于构建高度特定且性能卓越的分类器&#xff0c;而无需任何训练数据。本文将深入探讨其理论基础&a…

新时期下k8s 网络插件calico 安装

1、k8s master节点初始化完毕以后一直处于notreadey状态&#xff0c;一直怀疑是安装有问题或者是初始化有问题&#xff08;当然&#xff0c;如果真有问题要先解决这些问题&#xff09;&#xff0c;经过不断探索才发现是网络插件没有安装导致的&#xff0c;根据建议安装calico插…

【图像加密解密】Logistic混沌映射的彩色图像加密算法复现(含相关性检验)【Matlab完整源码 1期】

1、说明 本文给出详细完整代码、完整的实验报告和PPT。 环境&#xff1a;MATLAB2019a 复现文献&#xff1a;[1]黄硕.基于改进的Logistic混沌映射彩色图像加密算法[J].河南工程学院学报(自然科学版),2015,27(02):63-67. 主要目的是为了快速了解何为混沌序列、混沌序列产生、…

[AUTOSAR 基础入门] - RTE虚拟总线详解

文章目录 一、什么是RTE二、RTE的作用三、RTE对Runnables的运行支撑四、RTE与通信4.1. RTE – ECU之间通信4.2. RTE - Sender/Receiver 通信4.2.1 不使用队列&#xff08;直接访问&#xff09;4.2.2 不使用队列&#xff08;缓存访问&#xff09;4.2.3 使用队列 4.3 RTE - Clien…

Linux下文件操作相关接口

文章目录 一 文件是什么普通数据文件 二 文件是谁打开的进程用户 三 进程打开文件的相关的接口c语言标准库相关文件接口1. fopen 函数2. fread 函数3. fwrite 函数4. fclose 函数5. fseek 函数 linux系统调用接口1. open 系统调用2. creat 系统调用3. read 系统调用4. write 系…

用Python实现简单的任务自动化

目录 1. 自动发送邮件提醒 2. 自动备份文件 3. 自动下载网页内容 总结 在现代工作和生活中,任务自动化可以极大地提高效率和准确性。Python,作为一种功能强大且易于学习的编程语言,是实现任务自动化的理想选择。本文将通过几个简单而实用的案例,展示如何用Python实现任…

小程序开发-页面事件之上拉触底实战案例

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

Docker 服务、镜像、容器之命令(Docker Services, Images, and Container Commands)

Docker 服务、镜像、容器之命令 Docker是一个强大的容器化平台&#xff0c;能够帮助开发者高效地构建、部署和管理应用程序。本文将详细介绍Docker的服务命令、镜像命令和容器命令&#xff0c;帮助你快速上手Docker。 一、Docker的服务相关命令 在使用Docker之前&#xff0c…

STM32内置Flash

一、原理 利用flash存储用户数据需要注意查看&#xff0c;用户数据是否会覆盖芯片运行程序。 IAP&#xff08;在程序中编程&#xff09;利用程序修改程序本身&#xff0c;和OTA是一个原理。IAP在程序中编程支持任意一种通信下载。 ICP&#xff08;在电路中编程&#xff0c;通…

两种方式实现Kepware与PLC之间的心跳检测

两种方式实现Kepware与PLC之间的心跳检测 实现Kepware与PLC之间的心跳检测1.OPCUA 外挂程序2.Kepware Advanced Tag 实现Kepware与PLC之间的心跳检测 1.OPCUA 外挂程序 这是通过上位程序来触发心跳的一种机制&#xff0c;在C#中&#xff0c;可以利用OPC UAOPCAutodll的方式…

英伟达Project Digits赋能医疗大模型:创新应用与未来展望

英伟达Project Digits赋能医疗大模型&#xff1a;创新应用与未来展望 一、引言 1.1 研究背景与意义 在当今数字化时代&#xff0c;医疗行业作为关乎国计民生的关键领域&#xff0c;正面临着前所未有的挑战与机遇。一方面&#xff0c;传统医疗模式在应对海量医疗数据的处理、复…

中国省级产业结构高级化及合理化数据测算(2000-2023年)

一、数据介绍 数据名称&#xff1a;中国省级产业结构高级化、泰尔指数 数据年份&#xff1a;2000-2023年 数据范围&#xff1a;31个省份 数据来源&#xff1a;中国统计年鉴、国家统计局 数据整理&#xff1a;内含原始版本、线性插值版本、ARIMA填补版本 数据说明&#xf…

关于Mac使用VSCode连接虚拟机

1. 下载插件 输入Remote - SSH下载下图两个插件。 2. 配置虚拟机信息 按图示步骤点击完成后&#xff0c;进入到虚拟主机的配置页面。 其中Host可以自定义主机名&#xff0c;HostName是虚拟机ip&#xff0c;可以通过ifconfig eth0查看ip&#xff0c;User是虚拟机的用户名。…

GOGOGO 接口

低高耦合?【程序中追求低耦合,所以接口广用】 低耦合:关联依赖性弱(你走了我还在) 高耦合:关联依赖性强(牵一发而动全身) 接口 概念:多个抽象方法的集合,只有结构无具体实现,并交给实现类完成功能操作【接口写功能,实现类写具体实现】 语法结构: 定义接口的关…