日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

C語言字符串函數模擬實現流程介紹_C 語言

作者:燭九_陰 ? 更新時間: 2022-11-07 編程語言

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

一、strlen

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

strlen函數的讀取結束標志為’\0’,因此,若字符串中沒有’\0’,字符串長度則為隨機值。

下面將以三種方式模擬實現strlen函數,函數將命名為 my_strlen。

1.使用計數器

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

顯示結果:

該方法為設置一個計數器變量 count,讓計數器在指針每增加一個字節時自增一,當 *str 為’\0’時,循環結束,返回的count就是字符串長度。

2.使用函數遞歸

#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;
}

顯示結果:

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;
}

顯示結果:

二、strcpy

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

源字符串必須以’\0’結束,目標字符串會將’\0’一同拷貝

下面將模擬實現strcpy,函數命名為my_strcpy

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

顯示結果:

三、strcat

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

源字符串必須以’\0’結束,否則程序將崩潰。

下面將模擬實現strcat,函數命名為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++;//先將目標指針遍歷到'\0'的位置上
	}
	while (*dest++ = *scr++)
	{
		;
	}
	return start;
}
int main()
{
	char arr1[20] = "hello ";
	char arr2[] = "world!";
	printf("%s\n", my_strcat(arr1, arr2));
	return 0;
}

顯示結果:

四、strcmp

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

標準規定:

1. str1>str2,返回值>0

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

3. str1<str2,返回值<0

下面將模擬實現strcmp,函數命名為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')//兩個字符串對應元素相等并都不為'\0'時,遍歷這個字符串
		{
			str1++;
			str2++;
		}
		else
			return 0;//此為直到兩個字符串結束都相等,所以返回0
	}
	return *str1 - *str2;//不相等時返回兩個字符串對應元素的差值即可判斷大小。
}
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;
}

顯示結果:

原文鏈接:https://blog.csdn.net/yishaobai/article/details/126839912

欄目分類
最近更新