嵌入式軟件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.pswp.cn/web/65460.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/65460.shtml
英文地址,請注明出處:http://en.pswp.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…