自定義C語言中常用的字元串操作函數

来源:https://www.cnblogs.com/TomHe789/archive/2020/03/09/12452492.html
-Advertisement-
Play Games

C語言中提供了許多的字元串操作函數,常見的字元串操作函數有以下幾種: 1,求字元串長度的函數 原型函數:strlen(字元串名稱); 實現原理:將字元串名稱傳入該函數,該函數會遍歷該字元串,最後將長度返回給我們,註意返回的長度不包括'\0'; 2,字元串拷貝函數 原型函數:strcpy(字元串1名稱 ...


C語言中提供了許多的字元串操作函數,常見的字元串操作函數有以下幾種:

 

1,求字元串長度的函數

  原型函數:strlen(字元串名稱);

  實現原理:將字元串名稱傳入該函數,該函數會遍歷該字元串,最後將長度返回給我們,註意返回的長度不包括'\0';

 

2,字元串拷貝函數

  原型函數:strcpy(字元串1名稱, 字元串2名稱);

  實現原理:該函數需要傳入兩個字元串名稱,所謂拷貝其實是指將字元串2所包含的元素,複製到字元串1中,註意

  這裡的複製其實也包含覆蓋的意思,字元串1中原來的元素會被覆蓋掉;

 

3,字元串拼接函數

  原型函數:strcat(字元串1名稱, 字元串2名稱);

  實現原理:該函數也需要傳入兩個字元串名稱,所謂拼接其實是指將字元串2所包含的元素,拼接到字元串1的後面;

 

4,字元串比較函數

  原型函數:strcmp(字元串1名稱, 字元串2名稱);

  實現原理:該函數也是需要傳入兩個字元串的名稱的,然後同時遍歷兩個字元串,每次都分別從這兩個字元串中取出一個字元,

  再比較這兩個字元的ASCII碼,如果從字元串1中取出的字元的ASCII碼比從字元串2中取出的ASCII碼要大,那麼該函數就會返回 1,

  如果小的話該函數就會返回 -1,如果取到了兩個字元串的最後一個字元,每一個字元的ASCII碼都是相等的,那麼該函數就會返回 0。

 

瞭解完這幾個字元串操作函數的原理之後,我們就可以不使用C語言提供的庫函數,自己自定義這幾個函數了;

具體代碼如下:

#include <stdio.h>
//函數聲明
int myStrlen(char str[]);
void muStrcpy(char str1[], char str2[]);
void myStrcat(char str1[], char str2[]);
int myStrcmp(char str1[], char str2[]);
int main()
{
    char str1[] = "TomHe789";
    char str2[] = "TomHe";
    char str3[] = "789";
    char str4[] = "abcde";
    char str5[] = "abcde";
    //列印str1的長度
    printf("str1Len = %d\n", myStrlen(str1));   //8
    //將str2拷貝到str1中
    muStrcpy(str1, str2);                       
    printf("str1 = %s\n",str1);                 //TomHe
    //將str3拼接到str2後面
    myStrcat(str2, str3);                       
    printf("str2 = %s\n",str2);                 //TomHe789
    //列印出 myStrcmp(str4, str5)的結果
    printf("res = %d", myStrcmp(str4, str5));   //0
    return 0;
}

//自定義字元串長度函數
int myStrlen(char str[]){
    int len = 0;
    while (str[len] != '\0')
    {
        len++;
    }
    return len;
    
}

//自定義字元串拷貝函數
void muStrcpy(char str1[], char str2[])
{
    int len = 0;
    while (str2[len] != '\0' || str1[len] != '\0')
    {
        str1[len] = str2[len];
        len++;
    }
    str1[len] = '\0';
    
}

//自定義字元串拼接函數
void myStrcat(char str1[], char str2[])
{
    int len = 0;
    int len1 = 0;
    while (str1[len] != '\0')
    {
        len++;
    }
    while (str2[len1] != '\0')
    {
        str1[len] = str2[len1];
        len++;
        len1++;
    }
    str1[len] = '\0';
}

//自定義字元串比較函數
int myStrcmp(char str1[], char str2[])
{
    int len = 0;
    while (str1[len]!='\0' || str2[len]!='\0')
    {
        if(str1[len] > str2[len])
            return 1;
        else if(str1[len] < str2[len])
            return -1;
        else
            len++;
    }
    return 0;
}

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 記錄大話設計學習過程。 鏈接:https://pan.baidu.com/s/1JNaagbvOkwAHMBe6vdH8lg 提取碼:ko5t 如果能想到多一個動機去改變一個類,那麼這個類負責的職責就多於一個。 單一職責在企業里就能明顯的體現出來,HR一個類、開發人員一個類、項目經理一個類、測試人員 ...
  • 本人免費整理了Java高級資料,涵蓋了Java、Redis、MongoDB、MySQL、Zookeeper、Spring Cloud、Dubbo高併發分散式等教程,一共30G,需要自己領取。傳送門:https://mp.weixin.qq.com/s/osB-BOl6W-ZLTSttTkqMPQ 前 ...
  • 圖解Java設計模式之建造者模式 蓋房項目需求 傳統方式解決蓋房需求 傳統方式的問題分析 建造者模式基本介紹 建造者模式的四個角色 建造者模式原理類圖 建造者模式在JDK的應用和源碼分析 建造者模式的註意事項和細節 蓋房項目需求 1)需要建房子 :這一過程為打樁、砌牆、封頂2)房子有各種各樣的,比如 ...
  • 使用gRPC做微服務的內部通信 gRPC是一個由Google開源的遠程服務調用框架,具有多路復用和雙向流式通信的特性。 大家好,在本文中將為大家介紹為什麼我們應該使用gRPC代替RESTful或JSON,來開發微服務內部的通信介面。 什麼是gRPC? gRPC是一個高性能的、開源的、普遍通用的RPC ...
  • 1.一個小型網路水果超市,負責給用戶網上訂購蘋果、芒果、桃子、荔枝。用戶可以註冊成為會員,預約、訂購、查詢、取消等常規動作。請設計用例模型.1) 參與者2)用例圖3)一個重要的用例進行描述 2. 畫出類圖 一家公司有許多部門,通過部門名唯一的確定一個部門,每個部門有一名經理主管,也有的經理不管理任何 ...
  • P1034 矩形覆蓋 題目描述 在平面上有n個點(n include include include include using namespace std; int read(){ int x=0,f=1;char ch=getchar(); while(ch'9'){if(ch==' ')f= ...
  • 一、內容回顧 1、re模塊 2、正則分組 元字元、量詞、惰性符號 3、補充 [],[^]:帶有特殊意義的元字元到字元組內大部分取消其特殊含義。 如果擔心出現特殊含義:加\ 會取消的:[()+ . ] [( )] 的位置決定了它的意義,寫在字元組的第一個位置就表示一個普通的橫杠。 寫在字元組的其他任何 ...
  • 一、BeautifulSoup四大對象 1.Tag (1)對應的就是Html中的標簽; (2)可以通過soup,tag_name (3)tag裡面有兩種重要的屬性 name:用於列印標簽的名字 attrs:用於列印屬性(返回一個字典) contents:列印內容(返回一個列表) from bs4 i ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...