C语言之strlen,strcpy,strcat,strcmp的实现原理(笔试概率很大,一定要掌握其原理!)

1、strlen函数
头文件:#include <string.h>
函数原型:size_t strlen(const char *s);
功能:计算字符串s的长度,不包括’\0’。
参数:s表示指向被计算的字符串的首地址。
返回值:返回字符串中字符的个数。
补充:strlen和sizeof的区别
相同点
sizeof与strlen都可以计算空间大小。
不同点
(1)sizeof计算字符串时,以保存字符串的空间大小为准;strlen计算时,以字符串中字符个数为准,不包括’\0’,
参数只能是字符数组或者字符指针。
(2)sizeof是关键字、运算符;strlen是函数。
(3)sizeof可以计算变量、常量、表达式、指针、数组、结构体、字符串等;strlen只能用来计算字符串。
strlen实现:

#include <stdio.h>

int main(int argc,char *argv[])
{
	char str[] = "hello world!";
	int count = 0;
	while(str[count] != '\0')
	{
		count++;
	}
	printf("length = %d\n",count);//length = 12
	return 0;
}

2、strcpy函数
头文件: #include <string.h>
函数原型:char *strcpy(char *dest, const char *src);
参数:src、dest表示指向两个字符串的首地址。
功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间。
返回值:返回dest指针指向的字符串。
strcpy实现:

#include <stdio.h>

int main(int argc,char *argv[])
{
	char str1[32] = "hello world!";
	char str2[32] = "abcd";

	int i = 0,j = 0;
	while(str2[j] != '\0')
	{
		str1[i] = str2[j];
		i++;
		j++;
	}
	str1[i] = '\0';
	printf("str1 = %s\n",str1);//str1 = abcd
	
	return 0;
}

3、strcat函数
头文件: #include <string.h>
函数原型:char *strcat(char *dest, const char *src);
参数:dest、src表示指向两个字符串的首地址。
功能:将src字符串追加到dest字符串,覆盖dest末尾的终止空字节(’\0’),然后添加一个终止空字节(’\0’)。
返回值:返回dest指针指向的字符串。
strcat实现:

#include <stdio.h>

int main(int argc,char *argv[])
{
	char str1[32] = "hello world!";
	char str2[32] = "hello world!";

	int i = 0,j = 0;
	while(str1[i] != '\0')
	{
		i++;
	}

	while(str2[j] != '\0')
	{
		str1[i++] = str2[j++];
	}
	str1[i] = '\0';
	printf("str1 = %s\n",str1);//str1 = hello world!hello world!

	return 0;
}

4、strcmp函数
头文件: #include <string.h>
函数原型: int strcmp(const char *s1, const char *s2);
参数:s1、s2表示指向两个字符串的首地址。
功能:比较两个字符串。
返回值::返回一个小于、等于或大于零的整数。
补充:
如果返回值小于 0,则表示 str1 小于 str2。
如果返回值等于 0,则表示 str1 等于 str2。
如果返回值大于 0,则表示 str1 大于 str2。
strcmp实现:

#include <stdio.h>

int main(int argc,char *argv[])
{
	char str1[32] = "hello ";
	char str2[32] = "hello world!";

	int i = 0,j = 0;
	while(str1[i] != '\0' && str2[j] != '\0')
	{
		if(str1[i] > str2[j])
		{
			printf("1\n");
			return 0;
		}
		else if(str1[i] < str2[j])
		{
			printf("-1\n");
			return 0;
		}
		else
		{
			i++;
			j++;
		}
	}

	if(str1[i] != '\0' && str2[j] == '\0')
	{
		printf("1\n");
	}

	if(str1[i] == '\0' && str2[j] != '\0')
	{
		printf("-1\n");
	}

	if(str1[i] == '\0' && str2[j] == '\0')
	{
		printf("0\n");
	}

	return 0;//最终运行结果:-1
}

如果能有幸帮到来者,请不要吝啬点赞+收藏,您的小小鼓励将是笔者莫大动力!非常感谢!

上一篇:编码仿真之RM编译码实现


下一篇:C 库函数 - strcat()