【C言語】文字列関数の紹介とシミュレーションの実装<1>

コンテンツ

strlen

strcat

strcpy

strcmp

strstr


strlen

                           strlen
ヘッダーファイル#include<string.h> 
形式size_tstrlen(const char * str)
関数文字列の長さを計算します
戻り値文字列の長さを返します
//strlen的模拟实现
#include<stdio.h>
#include<assert.h>
size_t  my_strlen(const char* str)
{
	assert(str); int count = 0;
	while (*str != '\0')
	{
		str++;
		count++;
	}
	return count;
}

strcat

                          strcat
ヘッダーファイル#include<string.h>  
フォーマットchar*strcat(char * dest、const char * src)
関数ターゲット文字列に部分文字列を追加します
戻り値ターゲット文字列の最初のアドレス
//strcat模拟实现
#include<stdio.h>
#include<assert.h>
char* my_strcat(char* str1,const char *str2)
{
	assert(str1, str2);
	char* tmp = str1;
	//找出str1中的斜杠零
	while (*str1)
	{
		str1++;
	}
	//在str1上追加
	while (*str1++=*str2++)
	{
		;
	}
	return tmp;
}
int main()
{
	char arr1[20] = "hello";
	char arr2[] = " world";
	printf("%s",my_strcat(arr1,arr2));
	return 0;
}

strcpy

                          strcpy
ヘッダーファイル#include<string.h> 
格式char*strcpy(char * dest、char * src)
機能パラメータsrc文字列をパラメータdestが指すアドレスにコピーします
戻り値ターゲット文字列の最初のアドレス
//模拟实现strcpy
#include<stdio.h>
#include<assert.h>
char* my_strcpy(char *str2,char *str1)
{
	assert(str1, str2);
	char* tmp = str2;
	while (*str1)
	{
		*str2++ = *str1++;
	}
	return tmp;
}
int main()
{
	char arr1[20] = "abcdef";
	char arr2[20] = "xxxxxxxxxxxxx";
	my_strcpy(arr2,arr1);
	printf("%s", arr2);
	return 0;
}

strcmp

                         strcmp
ヘッダーファイル#include<string.h> 
フォーマットintstrcmp(const char * str1、const char * str2)
機能2つの文字列のサイズを比較します

戻り値str1>str2戻り値>0           

                           str1<str2戻り値<0     

                           str1=str2戻り値=0     

//strcmp模拟实现
#include<stdio.h>
#include<assert.h>
int strcmp(const char* str1,const char* str2)
{
	assert(str1, str2);
	while (*str1 == *str2)
	{
		str1++;
		str2++;
	}
	return *str1 - *str2;
	
}
int main()
{
	char arr1[] = "abc";
	char arr2[] = "abcd";
	printf("%d", strcmp(arr1, arr2));
	return 0;
}

strstr

                          strstr
ヘッダーファイル#include<string.h> 
格式char*my_strstr(const char * str、const char * substr)
機能ターゲット文字列内の部分文字列を検索
戻り値ターゲット文字列で、サブ文字列と同じ文字列の最初のアドレス
#include<stdio.h>
#include<assert.h>
char* my_strstr(const char*str,const char* substr)
{
	char* s1 = str;//防止str被破坏
	char* s2 = substr;//防止substr被败坏
	char* cur = str;//存储中间地址
	assert(str && substr);
	//排除substr为空
	if (substr == '\0')
	{
		return str;
	}
	while (*cur)
	{
		s1 = cur;
		s2 = substr;
		while (*s1 && *s2 && *s1 == *s2)
		{
			s1++;
			s2++;
	    }
		if (*s2 == '\0')
			return cur;
		cur++;
	}
	return NULL;
}
int main()//模拟实现strstr函数
{
	char arr1[] = "abbbcdef";
	char arr2[] = "bbc";
	printf("%s", my_strstr(arr1, arr2));
	return 0;
}

おすすめ

転載: blog.csdn.net/m0_64332179/article/details/122986054