str-函数详解及模拟实现(strlen、strcpy、strcat、strcmp)

字符串内置函数

       C语言中除了之前讲过的基本数据类型之外,还有两个常用的结构:数组与字符串。事实上C语言本身是没有字符串类型的,字符串通常放在常用字符串中或字符数组中。字符串常量适用于那些不对其做出改变的字符串函数。字符串通常需要以’\0’作为其结束的标志符,针对字符串独特的结构特点,string库给出了一系列功能的库函数。以下介绍一些基本内置函数的使用方法以及模拟功能写法。

函数的功能及模拟

strlen

strlen函数介绍

       strlen 的主要功能是求得字符串的长度,当然,从字符长度的第一个元素开始,到’\0’为止,但是却不包括’\0’,这一点尤其需要注意。MSDN中对其函数作了以下声明:

size_t strlen( const char *string );

       该函数要求传入一个字符型的指针,且其中内容不可被修改,返回一个size_t(即unsigned int)类型的值,即长度。
       例如以下代码:

char arr[] = "abcdefg";
	int length = strlen(arr);
	printf("the arr length is %d\n", length);

       其运行的值正如我们所需要计算的那样一共有七个字符长度:
在这里插入图片描述

strlen函数模拟

       具体代码如下:

int my_strlen(const char *str)//strlen的模拟实现
{
    
    
	const char *str_c = str;//保护指针
	int count = 0;
	assert(str != NULL);//断言,保证指针不为空
	while (*str_c != '\0')
	{
    
    
		count++;
		str_c++;
	}
	return count;//返回长度的数值
}

       通过字符串首地址,按照其连续存储的特点对其元素依次访问直至’\0’结束。

strcpy

strcpy函数介绍

       strcpy的主要功能是将一个字符串的内容完全复制到目标空间中,包括’\0’,其要求目标空间有足够大的空间用以接收源字符串。MSDN中对其函数作的声明如下:

char *strcpy( char *strDestination, const char *strSource );


       其要求传入两个地址,第一个为目标字符串的首地址,第二个是需要进行复制的源地址,要求源地址中的数据只可访问而不可进行修改,返回的同样是地址。
       例如:

	char arr[100] = "abcdefg";
	char arr_s[] = "strcpy function";
	char* pp= strcpy(arr,arr_s);
	printf("the final string is >%s\n", pp);

       其输出的值为:
在这里插入图片描述

strcpy函数模拟

char *my_strcpy(char *strD, const char *strS)
{
    
    
	assert(strD != NULL && strS != NULL);
	char* strd = strD;
	const char* strs = strS;
	while (*strs != '\0')
	{
    
    
		*strd++ = *strs++;
	}
	*strd = '\0';
	return strD;
}

strcat

strcat函数介绍

       该函数主要功能实现两个字符串的拼接,MSDN给出声明:

char *strcat( char *strDestination, const char *strSource );

       参数类型与返回值将不再赘述
       程序功能例如:

char arr[100] = "I like ";
	char arr_s[] = "strcat function";
	char* pp= strcat(arr,arr_s);
	printf("the final string is >%s\n", pp);

       程序结果:
在这里插入图片描述

strcat函数模拟

char *my_strcat(char *strD, const char *strS)
{
    
    
	assert(strD != NULL && strS != NULL);
	char* strd = strD;
	const char* strs = strS;
	while (*strd != '\0')
	{
    
    
		strd++;
	}
	while (*strs != '\0')
	{
    
    
		*strd++ = *strs++;
	}
	*strd = '\0';
	return strD;
}

strcmp

strcmp功能

       在百度百科上我们可以显而易见的找出strcmp的功能:strcmp函数是string compare(字符串比较)的缩写,用于比较两个字符串并根据比较结果返回整数。基本形式为strcmp(str1,str2),若str1=str2,则返回零;若str1<str2,则返回负数;若str1>str2,则返回正数。有了这种判断的依据和标准就可以自己进行模拟函数写法。
首先先看一下库函数给出的使用方法:

int main()
{
    
    
	char str[] = "wocai xuexi hhhhh";
	char str1[] = "who like c";
	int res = strcmp(str, str1);
	if (res > 0)
		printf("str>str1\n");
	else if (res < 0)
		printf("str<str1\n");
	else
		printf("str=str1\n");
	return 0;
}

       则输出形如:
在这里插入图片描述

strcmp函数模拟

int my_strcmp(const char *str1, const char *str2)//strcmp的模拟实现
{
    
    
	assert(str1 != NULL && str2 != NULL);
	const char* s1 = str1;
	const char* s2 = str2;
	int result;
	while (*s1 != '\0' || *s2 != '\0')
	{
    
    
		if (*s1 - *s2 != 0)
			break;
		s1++;
		s2++;
	}
	result = *s1 - *s2;
	return result;
}

猜你喜欢

转载自blog.csdn.net/dream_i_success/article/details/110112455