中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何用C語言模擬實現字符串函數

發布時間:2021-09-26 13:45:03 來源:億速云 閱讀:117 作者:柒染 欄目:開發技術

這期內容當中小編將會給大家帶來有關如何用C語言模擬實現字符串函數,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

    前言

    編程過程中經常會使用到一些字符串函數,這些字符串函數都在C語言標準庫中,我們可以直接使用。但我們也要了解一下它們是如何實現的。

    模擬

    1.strlen 函數

    strlen函數是用來求字符串長度的。官方給出的解釋如圖

    如何用C語言模擬實現字符串函數

    返回值類型是無符號整型,參數類型是char*,遇見\0停止。

    strlen的模擬實現有三種方法,1、count計數。2、遞歸。3、指針減指針。

    count計數

    #include <stdio.h>
    int my_strlen(const char* str) {
    	int count = 0;
    	while (*str++) {
    		count++;
    	}
    	return count;
    }
    int main() {
    	char str[] = "abcdefg";
    	int len = my_strlen(str);
    	printf("%d", len);
    	return 0;
    }

    遞歸

    #include <stdio.h>
    int my_strlen( const char* str) {
    	if (*str == '\0') {
    		return 0;
    	}
    	else {
    		return my_strlen(++str) + 1;
    	}
    }
    int main() {
    	char str[] = "abcdefg";
    	int len = my_strlen(str);
    	printf("%d", len);
    	return 0;
    }

    指針減指針

    #include <stdio.h>
    int my_strlen(const char* str) {
    	char* p = str;
    	while (*p) {
    		p++;
    	}
    	return p - str;
    }
    int main() {
    	char str[] = "abcdefg";
    	int len=my_strlen(str);
    	printf("%d", len);
    	return 0;
    }

    2.strcpy 函數

    strcpy函數是字符串拷貝函數。就是把源地址字符串拷貝到目的地址去。源地址字符串必須有\0。目的地址必須足夠大。源地址字符串的\0也會拷貝過去,返回目的地址的地址。

    官方解釋如圖

    如何用C語言模擬實現字符串函數

    模擬實現

    #include <stdio.h>
    char* my_strcpy(char* dest,const char* sour) {
        char* p=dest;
    	while (*dest++ = *sour++) {
    		;
    	}
        return p;
    }
    int main() {
    	char sur[] = "abcdefg";
    	char dest[10] = { 0 };
    	printf("%s", my_strcpy(dest,sur));
    	return 0;
    }

    3.strcat 函數

    strcat函數是字符串追加函數。就是把源地址字符串追加到目的地址后邊。要注意的是當遇見源地址的\0時停止,目的地址必須可修改,且足夠大。strcat函數不能用于追加字符串自己,會越界,根本停不下來。

    官方解釋如圖

    如何用C語言模擬實現字符串函數

    模擬實現

    #include <stdio.h>
    char* my_strcat(char* str2,const char* str1) {
    	char* p = str2;
    	while (*str2++){
    		;
    	}
    	str2--;
    	while (*str2++ = *str1++) {
    		;
    	}
    	return p;
    }
    int main() {
    	char str1[] = "abcdefg";
    	char str2[20]="abc";
    	printf("%s", my_strcat(str2, str1));
    	return 0;
    }

    4.strcmp函數

    strcmp函數是字符串比較函數,如果str1比str2大就返回正值,str1比str2小返回負值。str1=str2比較下一對字符。只要有一個遇見\0就停止。

    官方解釋如圖

    如何用C語言模擬實現字符串函數

    模擬實現

    #include <stdio.h>
    int my_strcmp( const char* str1,const char* str2) {
    	while (*str1++-*str2++==0 && *str1!='\0' && str2!='\0') {
    		;
    	}
    	return *--str1 - *--str2;
    }
    int main() {
    	char str1[] = "abcdefg";
    	char str2[] = "bbcdef";
    	int a=my_strcmp(str1,str2);
    	printf("%d", a);
    	return 0;
    }

    5.strncpy函數

    strncpy函數是長度受限制的字符串拷貝函數,可以指定拷貝多少給字節,當給定的字節數大于要拷貝的字符串時,不夠的用\0補充。

    官方解釋

    如何用C語言模擬實現字符串函數

    模擬實現

    #include <stdio.h>
    char* my_strncpy(char* dest,const char* sour,int num) {
    	char* p = dest;
    	while (num--) {
    		if (*sour != '\0') {
    			*dest++ = *sour++;
    		}
    		else {
    			*dest++ = '\0';
    		}
    	}
    	return p;
    }
    int main() {
    	char sur[] = "abcdefg";
    	char dest[10] = { 0 };
    	printf("%s", my_strncpy(dest, sur,10));
    	return 0;
    }

    6.strncat函數

    strncat函數,需要注意的一點是,字符串追加完成后目的地址斜杠零是追加完后自己補充的。所以它可以實現自己給自己 追加。

    官方解釋

    如何用C語言模擬實現字符串函數

    模擬實現

    #include <stdio.h>
    char* my_strncat(char* str2,const char* str1,size_t num) {
    	char* p = str2;
    	while (*str2++){
    		;
    	}
    	str2--;
    	while (num--) {
    		if (*str1 != '\0') {
    			*str2++ = *str1++;
    		}
    	}
    	*str2 = '\0';
    	return p;
    }
    int main() {
    	char str1[] = "abcdefg";
    	char str2[20]="abc";
    	printf("%s", my_strncat(str2, str1,6));
    	return 0;
    }

    7.strncmp函數

    strncmp函數,比較字符串,和strcmp類似只是可以確定比較前幾個字符。

    官方解釋

    如何用C語言模擬實現字符串函數

    模擬實現

    #include <stdio.h>
    int my_strncmp( const char* str1,const char* str2,size_t num){
    	while (num--&& *str1++-*str2++==0 && *str1!='\0'&& str2!='\0') {
    		;
    	}
    	return (*--str1 - *--str2);
    }
    int main() {
    	char str1[] = "abcdefg";
    	char str2[] = "bbcdef";
    	int a=my_strncmp(str1,str2,5);
    	printf("%d", a);
    	return 0;
    }

    8.strstr函數

    strstr函數就是在一個字符串里找子字符串。

    官方解釋

    如何用C語言模擬實現字符串函數

    模擬實現

    #include <stdio.h>
    const char* my_strstr(const char* str1, const char* str2) {
    	while (*str1) {
    		const char* p1 = str1;
    		const char* p2 = str2;
    		while (*p1++ == *p2++) {
    			;
    		}
    		if (*--p2 == '\0') {
    			break;
    		}
    		else {
    			str1++;
    		}
    	}
    	return str1;
    }
    int main() {
    	char str1[] = "abbbcdefg";
    	char str2[] = "bcde";
    	int len = strlen(str2);
    	const char* p = my_strstr(str1, str2);
    	while (len--) {
    		printf("%c", *p++);
    	}
    	return 0;
    }

    9.strtok函數

    strtok函數是字符串切割函數,用的比較少也比較難懂。用的是時候要給一個用做分隔符的字符集合。strtok函數找到分隔符后將其置為0.返回一個指向該標記的指針。如果第一個參數不為空則strtok找到第一個分隔符將其置零并記錄該處地址,第二次調用strtok則傳一個NULL則strtok會從前一個'\0‘處往后找下一個分隔符。

    官方解釋

    如何用C語言模擬實現字符串函數

    模擬實現

    #include <string.h> 
    #include <stdio.h> 
    char* my_strtok(char* str, char* demion)
    {
        static char* p_last = NULL;
        if (str == NULL && (str = p_last) == NULL)
        {
            return NULL;
        }
        char* s = str;
        char* t = NULL;
        while (*s != '\0')
        {
            t = demion;
            while (*t != '\0')
            {
                if (*s == *t)
                {
                    p_last = s + 1;
                    if (s - str == NULL)
                    {
                        str = p_last;
                        break;
                    }
                    *s = '\0';
                    return str;
                }
                t++;
            }
            s++;
        }
        return NULL;
    }
    int main(void)
    {
        char str[] = "liusen,lin,lll";
        char* result = NULL;
        result = my_strtok(str, ",");
        printf("%s\n", result);
        result = my_strtok(NULL, ",");
        printf("%s\n", result);
        return 0;
    }

    上述就是小編為大家分享的如何用C語言模擬實現字符串函數了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    景谷| 合川市| 冷水江市| 肇东市| 南安市| 绍兴县| 顺平县| 嘉峪关市| 织金县| 长汀县| 九龙城区| 横峰县| 仪陇县| 兴城市| 县级市| 庆元县| 彝良县| 布尔津县| 建湖县| 龙陵县| 皋兰县| 镇江市| 武宣县| 金阳县| 略阳县| 青川县| 岚皋县| 三穗县| 永胜县| 罗山县| 渑池县| 伊金霍洛旗| 明星| 娄底市| 出国| 噶尔县| 宜昌市| 翼城县| 宁强县| 巍山| 克什克腾旗|