当前位置: 首页 > news >正文

嵌入式软件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

相关文章:

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

嵌入式软件C语言面试常见问题及答案解析(三) 上一篇已经足够长了,再长也就有点不礼貌了,所以在这儿继续来总结分享那个面试中遇到的题目,文中的问题和提供的答案或者代码均代表个人的理解,如有不合理或者错误的地方,欢迎大家批评指正。 本文中题目列表 1. 编码实现子串定…...

nvm安装教程

Node Version Manager (NVM) 是一个用来管理多个 Node.js 版本的命令行工具。使用 NVM&#xff0c;你可以在同一台机器上轻松安装和切换不同的 Node.js 版本。以下是针对 Unix 类系统&#xff08;如 Linux 和 macOS&#xff09;的 NVM 安装教程&#xff1a; 安装 NVM 更新系统…...

单片机-定时器中断

1、相关知识 振荡周期1/12us; //振荡周期又称 S周期或时钟周期&#xff08;晶振周期或外加振荡周期&#xff09;。 状态周期1/6us; 机器周期1us; 指令周期1~4us; ①51单片机有两组定时器/计数器&#xff0c;因为既可以定时&#xff0c;又可以计数&#xff0c;故称之为定时器…...

Hadoop 实战笔记(一) -- Windows 安装 Hadoop 3.x

环境准备 安装 JAVA 1.8 Java环境搭建之JDK下载及安装下载 Hadoop 3.3.5 安装包 Hadoop 下载&#xff1a;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 中的压缩命令与技巧

文章目录 高比例压缩&#xff1a;Linux 中的压缩命令与技巧1. 压缩格式的选择2. gzip 命令示例&#xff1a;压缩文件示例&#xff1a;解压文件 3. bzip2 命令示例&#xff1a;压缩文件示例&#xff1a;解压文件 4. xz 命令示例&#xff1a;压缩文件示例&#xff1a;解压文件 5.…...

LabVIEW软件Bug的定义与修改

在LabVIEW软件开发过程中&#xff0c;bug&#xff08;程序错误或缺陷&#xff09;指的是程序中导致不符合预期行为的任何问题。Bug可能是由于编码错误、逻辑漏洞、硬件兼容性问题、系统资源限制等因素引起的。它可能会导致程序崩溃、功能无法正常执行或输出结果不符合预期。理解…...

基于Springboot + vue实现的办公用品管理系统

&#x1f942;(❁◡❁)您的点赞&#x1f44d;➕评论&#x1f4dd;➕收藏⭐是作者创作的最大动力&#x1f91e; &#x1f496;&#x1f4d5;&#x1f389;&#x1f525; 支持我&#xff1a;点赞&#x1f44d;收藏⭐️留言&#x1f4dd;欢迎留言讨论 &#x1f525;&#x1f525;&…...

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树的树形数据结构&#xff0c;它在数据…...

(四)结合代码初步理解帧缓存(Frame Buffer)概念

帧缓存&#xff08;Framebuffer&#xff09;是图形渲染管线中的一个非常重要的概念&#xff0c;它用于存储渲染过程中产生的像素数据&#xff0c;并最终输出到显示器上。简单来说&#xff0c;帧缓存就是计算机图形中的“临时画布”&#xff0c;它储存渲染操作生成的图像数据&am…...

python注意事项:range遍历越索引现象、列表边遍历边修改出现的问题

文章目录 前言一、range遍历越索引现象QS1:遍历range(2,2)会发生什么&#xff1f;不会报错&#xff0c;但是也不会遍历到任何内容QS1:遍历range(3,2)会发生什么&#xff1f;不会报错&#xff0c;但是也不会遍历到任何内容 二、列表边遍历边修改注意事项&#xff08;Java的List系…...

【C++】模板与泛型编程(三):重载与模板

16.3 重载与模板 函数模板可以被另一个模板或一个普通分模板函数重载。与往常一样&#xff0c;名字相同的函数必须具有不同数量或类型的参数&#xff08;这样才可以完成重载&#xff09;。 如果设计模板&#xff0c;则函数的匹配规则与普通函数的重载有所不同&#xff0c;具体…...

JavaScript字符串拓展:实用方法与示例全解析

一、引言&#xff1a;为什么要学习 JS 字符串拓展 在前端开发的世界里&#xff0c;JavaScript 如同基石般支撑着网页的交互与动态呈现。而字符串作为我们日常操作中最频繁接触的数据类型之一&#xff0c;其原生方法在面对复杂多变的业务需求时&#xff0c;有时难免显得捉襟见肘…...

基于html5实现音乐录音播放动画源码

源码介绍 基于html5实现音乐录音播放动画源码是一款类似Shazam的UI&#xff0c;点击按钮后&#xff0c;会变成为一个监听按钮。旁边会有音符飞入这个监听按钮&#xff0c;最后转换成一个音乐播放器。 效果预览 源码获取 基于html5实现音乐录音播放动画源码...

初学stm32 --- ADC模拟/数字转换器工作原理

目录 常见的ADC类型 并联比较型工作示意图 逐次逼近型工作示意图 ADC的特性参数 STM32各系列ADC的主要特性 ADC框图简介 参考电压/模拟部分电压 输入通道&#xff08; F1为例&#xff09; 转换序列&#xff08;F1为例&#xff09; 规则组和注入组执行优先级对比 规则…...

导航技术的分类

导航技术可以根据不同的分类标准进行划分&#xff0c;以下是从不同角度对导航技术的分类&#xff1a; 一、按导航信息获取原理分类 无线电导航&#xff1a;利用无线电波的传播特性来测定运动体的位置、速度等导航参数。常见的无线电导航系统包括罗兰-C、奥米加、台卡等。卫星…...

C++语言的函数实现

C语言中的函数实现详解 C是一种强大的编程语言&#xff0c;广泛应用于系统软件、游戏开发、实时物理模拟等多个领域。在C中&#xff0c;函数是组织和重用代码的重要工具。本文将深入探讨C中的函数实现&#xff0c;包括函数的定义、调用、重载、递归、作用域、内联函数和模板函…...

每日一题-两个链表的第一个公共结点

文章目录 两个链表的第一个公共结点问题描述示例说明示例 1示例 2 方法及实现方法描述代码实现 复杂度分析示例运行过程示例 1示例 2 总结备注 两个链表的第一个公共结点 问题描述 给定两个无环的单向链表&#xff0c;找到它们的第一个公共节点。如果没有公共节点&#xff0c…...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分&#xff1a; 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析&#xff1a; CTR…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

mongodb源码分析session执行handleRequest命令find过程

mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程&#xff0c;并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令&#xff0c;把数据流转换成Message&#xff0c;状态转变流程是&#xff1a;State::Created 》 St…...

centos 7 部署awstats 网站访问检测

一、基础环境准备&#xff08;两种安装方式都要做&#xff09; bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

postgresql|数据库|只读用户的创建和删除(备忘)

CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录&#xff0c;但是由于这个树组件的节点越来越多&#xff0c;导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多&#xff0c;导致的浏览器卡顿&#xff0c;这里很明显就需要用到虚拟列表的技术&…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中&#xff0c;我们渴望一个能激发创想、愉悦感官的工作与生活伙伴&#xff0c;它不仅是冰冷的科技工具&#xff0c;更能触动我们内心深处的细腻情感。正是在这样的期许下&#xff0c;华硕a豆14 Air香氛版翩然而至&#xff0c;它以一种前所未有的方式&#x…...

GitHub 趋势日报 (2025年06月06日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...

为什么要创建 Vue 实例

核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...