練習題——【學習補檔】庫函數的模擬實現

各種庫函數的模擬實現

  • 一、模擬實現strlen
    • 1.地址-地址型
    • 2.遞歸型
    • 3.計數器型
  • 二、模擬實現strcpy
  • 三、模擬實現strcmp
  • 四、模擬實現strcat
  • 五、模擬實現strstr

一、模擬實現strlen

模擬實現strlen有三種方法
1.地址-地址型
2.遞歸型
3.計數器型

1.地址-地址型

//	//1.地址-地址型
#include<stdio.h>
int main()
{//通過首字符的地址減去最后一個字符的地址來計算字符串長度const char* str =  "abcdef";const char*  p1 = 0;const char*  p2 = 0;p1 = str;while (*(str++) != '\0'){}str--;p2 = str;printf("%d",p2-p1);return 0;
}

2.遞歸型

//2.遞歸型
//遞歸型是通過一個遞歸,逐個的將字符計算
#include<stdio.h>
#include<assert.h>int my_strlen(const char* str)
{assert(str);if ((*str) != '\0')return my_strlen(++str) + 1;elsereturn 0;
}
int main()
{const char* str =  "abcdef";int ret =my_strlen(str);printf("%d",ret);return 0;
}

3.計數器型

//3.計數器型
//計數器型是逐個數字符串中的字符個數,直到遇到\0
#include<stdio.h>
#include<assert.h>
int my_strlen(const char* str)
{assert(str);int i = 0;while (*(str++) != '\0'){i++;}return i;
}
int main()
{const char* str =  "abcdef";int ret = my_strlen(str);printf("%d",ret);return 0;
}

在這里插入圖片描述

二、模擬實現strcpy

模擬實現strcpy
#include<stdio.h>
#include<assert.h>char* my_strcpy( char* str2, const char* str1)
{assert(str2 && str1);	//確保兩個地址不是空地址char* ret = str2;	//將初始地址保存while(*str2++ = *str1++)	//直接將地址1指向的內容賦給地址2指向的空間{;}return ret;	//返回地址2
}
int main()
{char str1[] = "abcdef";char str2[20] = {0};printf("%s\n", str1);printf("%s\n", my_strcpy(str2, str1));return 0;
}

在這里插入圖片描述

三、模擬實現strcmp

//strcmp功能為比較兩個字符串,前一個字符串的每個字符的ascall是否大于后一個
#include<stdio.h>
#include<string.h>
#include<assert.h>int my_strcmp(const char *str1 ,const char* str2)
{assert(str1 && str2);while ( *str1 >= *str2){if (*str2 == '\0')return 0;	//如果str1內包含了完整的str2,則返回0str1++;str2++;}return str1 - str2;		//如果str1的ascal碼大于str2 則會返回一個正數,否則會返回一個負數
}int main()
{//首先定義兩個字符串用于比較char str1[] = "abcdef";char str2[] = "abcd";if (my_strcmp(str1, str2) > 0){printf(">\n");}else if (my_strcmp(str1, str2) == 0){printf("=\n");}else if (my_strcmp(str1, str2) < 0){printf("<\n");}else{printf("error\n");}return 0;
}

在這里插入圖片描述

四、模擬實現strcat

//strcat的功能是在一個字符串的后面追加另一個字符串,并在這一過程中,覆蓋前面字符串的\0,添加后面字符串的\0#include<stdio.h>
#include<string.h>
#include<assert.h>char* my_strcat(char* str1, const char* str2)
{//記住各個數組的開頭char* p1 = str1;const char* p2 = str2;//找到前面數組str1的尾巴while (*(p1)!='\0')	{p1++;}//將str2的內容接到str1的尾巴上while (*(p2) != '\0'){*(p1++) = *p2;p2++;}*p1 = '\0';return str1;
}int main()
{char str1 [10] = "aaa";char str2 [10] = "bbb";printf("%s", my_strcat(str1, str2));return 0;
}

在這里插入圖片描述

五、模擬實現strstr

//strstr的功能是在字符串str1中查找是否含有字符串str2,如果存在,返回str2在str1中第一次出現的地址;否則返回NULL#include<stdio.h>
#include<string.h>
#include<assert.h>const char* my_strstr(const char* str1, const char* str2)
{assert(str1 && str2);const char* p1 = str1;const char* p2 = str2;const char* cp = str1;//找到p1與p2指向相同內容的位置,并確保二者不會出現空對實;while (*(p1) != *(p2)){if (p1 && p2 == 0)return 0;p1++;}//p1、p2內容一致時退出循環cp = p1;	//記錄p1、p2內容相同且不為/0,的位置的坐標//判斷后續內容是否一致while (*p1 == *p2){if (*p2 == '\0')	//當p2的內容被對比完畢時,則說明str1內部含有str2return cp;//如果p2對比還未完成,p1就到頭了怎么辦if (*p1 == '\0')return 0;p1++;p2++;}return 0;
}int main()
{char str1[] = "abcdef";char str2[] = "def";printf("%p", my_strstr(str1, str2));return 0;
}

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/161132.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/161132.shtml
英文地址,請注明出處:http://en.pswp.cn/news/161132.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

云服務器-從零搭建前后端服務

使用須知 選擇0M帶寬不能訪問公網&#xff08;不分配公網IP&#xff09;&#xff0c;如需分配公網IP請增加帶寬值。云服務器ECS默認不開啟虛擬內存如您需要使用請登錄云服務器內部操作。Linux開啟swap&#xff08;虛擬內存&#xff09;、Windows虛擬內存的設置若您購買了數據盤…

含分布式電源的配電網可靠性評估matlab程序

微?關注“電氣仔推送”獲得資料&#xff08;專享優惠&#xff09; 參考文獻&#xff1a; 基于仿射最小路法的含分布式電源配電網可靠性分析——熊小萍 主要內容&#xff1a; 通過概率模型和時序模型分別進行建模&#xff0c;實現基于概率模型最小路法的含分布式電源配電網…

web需求記錄

需求1&#xff1a;根據后端傳過來的設備名:DESKTOP-4DQRGQB&#xff0c;以及mac:e0:be:03:74:40:0b&#xff1b;iQOO-8&#xff0c;mac:b0:33:66:38:c3:25&#xff0c;用web option 是動態增加的&#xff08;也就是那個選擇框里面的東西是根據后端傳過來的值動態增加的&#xf…

upload-labs關卡12(基于白名單的%00截斷繞過)通關思路

文章目錄 前言一、靶場需要了解的前置知識1、%00截斷2、0x00截斷3、00截斷的使用條件1、php版本小于5.3.292、magic_quotes_gpc Off 二、靶場第十二關通關思路1、看源代碼2、bp抓包%00截斷3、驗證文件是否上傳成功 總結 前言 此文章只用于學習和反思鞏固文件上傳漏洞知識&…

LL(1)語法分析程序設計與實現

制作一個簡單的C語言詞法分析程序_用c語言編寫詞法分析程序-CSDN博客文章瀏覽閱讀322次。C語言的程序中&#xff0c;有很單詞多符號和保留字。一些單詞符號還有對應的左線性文法。所以我們需要先做出一個單詞字符表&#xff0c;給出對應的識別碼&#xff0c;然后跟據對應的表格…

國民新旅游時代,OTA們如何制勝新周期?

文 | 螳螂觀察&#xff08;TanglangFin&#xff09; 作者 | 圖霖 消費全面復蘇的大背景下&#xff0c;旅游業正迎來預期中的拐點。 一個顯著表現是&#xff0c;旅游消費正在從可選消費轉化成必選消費。 國內消費者旅游需求的不降反增&#xff0c;就是最好的印證。 同程研究…

DoFaker: 一個簡單易用的換臉工具

DoFaker: 一個簡單易用的換臉工具 基于insightface開發&#xff0c;可以輕松替換視頻或圖片中的人臉。支持windows和linux系統&#xff0c;CPU和GPU推理。onnxruntime推理&#xff0c;無需pytorch。 更新 2023/9/16 更新動作遷移算法2023/9/14 更新臉部增強算法(GFPGAN)和超分…

TypeScript枚舉

1、數字枚舉 enum Direction {Up,Down,Left,Right, } var Direction; (function (Direction) {Direction[Direction["Up"] 0] "Up";Direction[Direction["Down"] 1] "Down";Direction[Direction["Left"] 2] "L…

[點云分割] 基于顏色的區域增長分割

效果&#xff1a; 代碼&#xff1a; #include <iostream> #include <thread> #include <vector>#include <pcl/point_types.h> #include <pcl/io/pcd_io.h> #include <pcl/search/search.h> #include <pcl/search/kdtree.h> #inclu…

AR道具特效制作工具

AR&#xff08;增強現實&#xff09;技術已經逐漸滲透到各個行業&#xff0c;為企業帶來了全新的營銷方式和用戶體驗。在這個背景下&#xff0c;美攝科技憑借其強大的技術實力和創新精神&#xff0c;推出了一款專為企業打造的美攝AR特效制作工具&#xff0c;旨在幫助企業輕松實…

MIKE水動力筆記19_統計平均潮差

本文目錄 前言Step 1 ArcGIS中創建漁網點Step 2 將dfsu數據提取到漁網點Step 3 Python統計平均潮差 前言 日平均潮差&#xff08;average daily tidal range&#xff09;&#xff1a;日高潮潮高合計之和除以實有高潮個數為日平均高潮潮高&#xff0c;日低潮潮高合計之和除以實…

Quartz .Net 的簡單使用

參考了&#xff1a;c# .net framework 4.5.2 , Quartz.NET 3.0.7 - runliuv - 博客園 (cnblogs.com) https://www.cnblogs.com/personblog/p/11277527.html&#xff0c; Quartz.NET 作業調度&#xff08;一&#xff09;&#xff1a;Test - 簡書 自己要輪詢的任務&#xff1a…

NX二次開發UF_CAM_PREPRO_init_module 函數介紹

文章作者&#xff1a;里海 來源網站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan UF_CAM_PREPRO_init_module Defined in: uf_cam_prepro.h int UF_CAM_PREPRO_init_module(void ) overview 概述 Initializes the required environment for this module. 初始化此…

淺談Python裝飾器原理與用法分析

前言 本文實例講述了Python裝飾器原理與用法。分享給大家供大家參考&#xff0c;具體如下&#xff1a; 1、裝飾器的本質是函數&#xff0c;主要用來裝飾其他函數&#xff0c;也就是為其他函數添加附加功能 2、裝飾器的原則: (1) 裝飾器不能修改被裝飾的函數的源代碼 (2) 裝…

VScode調試沒有反應

點擊調試按鈕后沒反應 有可能是vscode中安裝的python插件版本問題 可以通過重新安裝比較舊一點的python嘗試解決此問題 步驟如下&#xff1a; 然后從中選擇比當前版本更低的版本即可 安裝完成后需重啟vscode

初識EasyAR

EasyAR 一、介紹&#xff08;核心還是 目標圖像的屏占比&#xff09; 支持 EasyAR-AR|AR技術|AR SDK|Unity AR|下載 1.表面、圖片(靜止/運動)跟蹤&#xff0c;支持多目標 2.3D物體(靜止/運動)跟蹤(注&#xff1a;物體旋轉、遠近移動也可以&#xff0c;本人試過&#xff0c;…

縱享雙創盛宴 “之江創客”再創電商新輝煌

消費日報網訊&#xff08;記者 牛夏風&#xff09;營造良好電商雙創生態&#xff0c;集聚電商發展新勢能。10月31日&#xff0c;以“開放、連接、協同、賦能”為主題的“之江創客”2023全球電子商務創業創新大賽總決賽暨頒獎典禮在湖州南潯圓滿落幕。 記者從現場獲悉&#xff…

SQL 中的 MIN 和 MAX 以及常見函數詳解及示例演示

SQL MIN() 和 MAX() 函數 SQL中的MIN()函數和MAX()函數用于查找所選列的最小值和最大值&#xff0c;分別。以下是它們的用法和示例&#xff1a; MIN() 函數 MIN()函數返回所選列的最小值。 示例&#xff1a; 查找Products表中的最低價格&#xff1a; SELECT MIN(Price) F…

js 獲取當前窗口顯示的放大比例

可以獲取當前窗口顯示的放大比例&#xff0c;也稱為設備像素比 (devicepixelratio) 。這通常用于處理高DPI (高分辨率)屏幕上的視圖縮放。您可以使用window.devicePixelRatio 屬性來獲得當前設備像素比。 以下是一個簡單的JavaScript示例&#xff0c;演示如何獲取設備像素比: j…

基于獼猴Spike運動解碼的不同解碼方法性能對比

公開數據集中文版詳細描述 參考前文&#xff1a;https://editor.csdn.net/md/?not_checkout1&spm1011.2124.3001.6192神經元Spike信號分析 參考前文&#xff1a;https://blog.csdn.net/qq_43811536/article/details/134359566?spm1001.2014.3001.5501神經元運動調制分析 …