亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C語言字符串函數(shù)模擬實現(xiàn)流程介紹

 更新時間:2022年09月15日 16:23:39   作者:燭九_陰  
字符串函數(shù)(String processing function)也叫字符串處理函數(shù),指的是編程語言中用來進行字符串處理的函數(shù),如C,pascal,Visual以及LotusScript中進行字符串拷貝,計算長度,字符查找等的函數(shù)

該文章將簡易模擬實現(xiàn)strlen、strcpy、strcat、strcmp、strstr。那么讓我們廢話少說,直接開始吧。

一、strlen

strlen-Get string length.即獲取字符串長度。函數(shù)參數(shù)為 const char* str,函數(shù)返回類型為 size_t。如下圖所示:

strlen函數(shù)的讀取結(jié)束標(biāo)志為’\0’,因此,若字符串中沒有’\0’,字符串長度則為隨機值。

下面將以三種方式模擬實現(xiàn)strlen函數(shù),函數(shù)將命名為 my_strlen。

1.使用計數(shù)器

#include <stdio.h>
#include <assert.h>
size_t my_strlen(const char* str)
{
	assert(str);//斷言一下傳過來的參數(shù)是否為空指針
	size_t count = 0;//設(shè)置一個計數(shù)器
	while (*str++)
	{
		count++;
	}
	return count;
}
int main()
{
	char arr[] = "hello world!";
	int ret = my_strlen(arr);
	printf("%d\n", ret);
	return 0;
}

顯示結(jié)果:

該方法為設(shè)置一個計數(shù)器變量 count,讓計數(shù)器在指針每增加一個字節(jié)時自增一,當(dāng) *str 為’\0’時,循環(huán)結(jié)束,返回的count就是字符串長度。

2.使用函數(shù)遞歸

#include <stdio.h>
#include <assert.h>
size_t my_strlen(const char* str)
{
	assert(str);
	if (*str != '\0')
		return 1 + my_strlen(str + 1);
	else
		return 0;
}
int main()
{
	char arr[] = "hello world!";
	int ret = my_strlen(arr);
	printf("%d\n", ret);
	return 0;
}

顯示結(jié)果:

3.使用指針-指針

#include <stdio.h>
#include <assert.h>
size_t my_strlen(const char* str)
{
	assert(str);
	const char* start = str;
	const char* end = str;
	while (*end != '\0')
	{
		end++;
	}
	return end - start;
}
int main()
{
	char arr[] = "hello world!";
	int ret = my_strlen(arr);
	printf("%d\n", ret);
	return 0;
}

顯示結(jié)果:

二、strcpy

strcpy-Copy string.即拷貝字符串。函數(shù)參數(shù)為 char* dest 和 const char* scr,函數(shù)返回類型為 char*。如下圖所示:

源字符串必須以’\0’結(jié)束,目標(biāo)字符串會將’\0’一同拷貝

下面將模擬實現(xiàn)strcpy,函數(shù)命名為my_strcpy

#include <stdio.h>
#include <assert.h>
char* my_strcpy(char* dest, const char* scr)
{
	assert(dest);
	assert(scr);
	char* start = dest;//記錄目標(biāo)指針的起始位置
	while (*dest++ = *scr++)
	{
		;
	}
	return start;
}
int main()
{
	char arr1[20] = "xxxxxxxxxxxxxxxxxxx";
	char arr2[] = "hello world!";
	printf("%s\n", my_strcpy(arr1, arr2));
	return 0;
}

顯示結(jié)果:

三、strcat

strcat-Concatenate strings.即連接字符串。函數(shù)參數(shù)為 char* dest 和 const char* scr,函數(shù)返回類型為 char*。如下圖所示:

源字符串必須以’\0’結(jié)束,否則程序?qū)⒈罎ⅰ?/p>

下面將模擬實現(xiàn)strcat,函數(shù)命名為my_strcat

#include <stdio.h>
#include <assert.h>
char* my_strcat(char* dest, const char* scr)
{
	assert(dest);
	assert(scr);
	char* start = dest;
	while (*dest != '\0')
	{
		dest++;//先將目標(biāo)指針遍歷到'\0'的位置上
	}
	while (*dest++ = *scr++)
	{
		;
	}
	return start;
}
int main()
{
	char arr1[20] = "hello ";
	char arr2[] = "world!";
	printf("%s\n", my_strcat(arr1, arr2));
	return 0;
}

顯示結(jié)果:

四、strcmp

strcmp-Concatenate strings.即比較兩個字符串。函數(shù)參數(shù)為 const char* str1 和 const char* str2,函數(shù)返回類型為 int。如下圖所示:

標(biāo)準(zhǔn)規(guī)定:

1. str1>str2,返回值>0

2. str1==str2,返回值=0

3. str1<str2,返回值<0

下面將模擬實現(xiàn)strcmp,函數(shù)命名為my_strcmp

#include <stdio.h>
#include <assert.h>
int my_strcmp(const char* str1, const char* str2)
{
	assert(str1);
	assert(str2);
	while (*str1 == *str2)
	{
		if (*str1 != '\0')//兩個字符串對應(yīng)元素相等并都不為'\0'時,遍歷這個字符串
		{
			str1++;
			str2++;
		}
		else
			return 0;//此為直到兩個字符串結(jié)束都相等,所以返回0
	}
	return *str1 - *str2;//不相等時返回兩個字符串對應(yīng)元素的差值即可判斷大小。
}
int main()
{
	char arr1[] = "abc";
	char arr2[] = "abcd";
	int ret = my_strcmp(arr1, arr2);
	if (ret > 0)
	{
		printf("arr1>arr2\n");
	}
	else if (ret < 0)
	{
		printf("arr1<arr2\n");
	}
	else
		printf("arr1==arr2\n");
	return 0;
}

顯示結(jié)果:

到此這篇關(guān)于C語言字符串函數(shù)模擬實現(xiàn)流程介紹的文章就介紹到這了,更多相關(guān)C語言字符串函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • c++學(xué)習(xí)之構(gòu)造函數(shù)

    c++學(xué)習(xí)之構(gòu)造函數(shù)

    類多么重要我就不多說了,只講講學(xué)習(xí),因為個人認(rèn)為類的學(xué)習(xí)無論從概念的理解還是實際代碼的編寫相對其他C兼容向的代碼都是比較有難度的, 對于以前學(xué)C 的人來說這才是真正的新概念和內(nèi)容,STL其實還比較好理解,不就是一個更大的函數(shù)庫和代碼可以使用嘛。
    2015-06-06
  • C++實現(xiàn)四則運算器(無括號)

    C++實現(xiàn)四則運算器(無括號)

    這篇文章主要為大家詳細(xì)介紹了C++實現(xiàn)四則運算器,無括號的計算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • C語言實現(xiàn)簡單的推箱子游戲

    C語言實現(xiàn)簡單的推箱子游戲

    這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)簡單的推箱子游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • C++實現(xiàn)下載的代碼

    C++實現(xiàn)下載的代碼

    這篇文章主要介紹了C++實現(xiàn)下載的代碼,以下載百度圖片為例較為完整的講述了C++下載的具體實現(xiàn)方法,需要的朋友可以參考下
    2014-10-10
  • C++11新特性之右值引用與完美轉(zhuǎn)發(fā)詳解

    C++11新特性之右值引用與完美轉(zhuǎn)發(fā)詳解

    C++11標(biāo)準(zhǔn)為C++引入右值引用語法的同時,還解決了一個短板,即使用簡單的方式即可在函數(shù)模板中實現(xiàn)參數(shù)的完美轉(zhuǎn)發(fā)。本文就來講講二者的應(yīng)用,需要的可以參考一下
    2022-09-09
  • C語言數(shù)組棧實現(xiàn)模板

    C語言數(shù)組棧實現(xiàn)模板

    這篇文章主要為大家詳細(xì)介紹了C語言數(shù)組棧實現(xiàn)模板,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • 淺析C++中memset,memcpy,strcpy的區(qū)別

    淺析C++中memset,memcpy,strcpy的區(qū)別

    本篇文章是對C++中memset,memcpy,strcpy的區(qū)別進行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-07-07
  • C語言實現(xiàn)學(xué)生選課系統(tǒng)

    C語言實現(xiàn)學(xué)生選課系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)學(xué)生選課系統(tǒng),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • C語言實例講解選擇語句的使用

    C語言實例講解選擇語句的使用

    選擇語句是C語言中的重要組成部分,該部分也比較基礎(chǔ),本文將通過最通俗易懂的方式來為大家做出講解。相信通過本文的學(xué)習(xí),讓大家一舉拿下C語言選擇語句的知識點
    2022-05-05
  • Qt實現(xiàn)制作簡單的計算器

    Qt實現(xiàn)制作簡單的計算器

    計算器是我們生活中很常見的東西,它可以由多種語言多種方式來實現(xiàn)。本文主要介紹的是利用Qt實現(xiàn)的簡易計算器的制作,文中的示例代碼講解詳細(xì),需要的可以參考一下
    2022-12-12

最新評論