字符串函数及其模拟实现,掌握并运用字符串函数(1)——strlen,strcpy,strcmp

troop的个人主页
大家好,这里是troop,今天又来给大家更新C语言的内存了,今天带来的是字符串函数及其使用的细节,并且带着大家把这些字符串都模拟一遍以便加深我们的理解,
ok,那么现在开始我们今天的学习吧!

字符串函数及其模拟实现

  • 前言
  • 1.求字符串长度函数strlen()
    • 模拟实现strlen函数
      • 1,
      • 2.递归
      • 3.指针-指针
  • 2.拷贝函数strcpy
    • 模拟实现拷贝函数
  • 3.模拟实现比较函数strcmp
    • 模拟实现strcmp函数
  • 总结

前言

我们在C语言的学习中,字符和字符串的运用是很多的,而字符串函数作为库函数的一大类,我们使用这类函数的次数也是非常的频繁,所以学习好字符串函数对于我们学习c语言是非常重要的

  • 我们先来整体了解以下有哪些字符串函数
  • 字符串函数及其模拟实现,掌握并运用字符串函数(1)——strlen,strcpy,strcmp_第1张图片
    接下来我们开始介绍函数

1.求字符串长度函数strlen()

size_t strlen ( const char * str );
  • 通常字符串就是以”\0“为结尾,strlen函数就是计算”\0“前面字符串的大小的,所以strlen函数的参数部分一定是要以”\0“为结尾,不然结果就是随机值,例如:char arr[10]={"a","b","c"}//没有”\0“做结尾
  • 注意这个函数的返回值为size_t,是无符号的整数这个地方也有一个典型的题目
#define _CRT_SECURE_NO_WARNINGS 1
#include 
#include 

int main()
{
	if (strlen("abc") - strlen("abcdef") > 0)
	{
		printf("大于\n");
	}
	else
	{
		printf("小于等于\n");
	}

	return 0;
}

字符串函数及其模拟实现,掌握并运用字符串函数(1)——strlen,strcpy,strcmp_第2张图片
因为size_t是无符号的整数所以这里的返回值一定是大于,而我们想要正确的结果我们进行强制类型转化只要改变strlen的类型即可

if ((int)strlen("abc") - (int)strlen("abcdef") > 0)

字符串函数及其模拟实现,掌握并运用字符串函数(1)——strlen,strcpy,strcmp_第3张图片

模拟实现strlen函数

模拟实现strlen函数的方法一共有三种我们先从简单的开始

1,

int my_strlen(char*arr)
{
	int num = 0;
	while (*arr)
	{
		*arr++;
		num++;
	}
	return num;
}

字符串函数及其模拟实现,掌握并运用字符串函数(1)——strlen,strcpy,strcmp_第4张图片

2.递归

int my_strlen(char* arr)
{
	if (*arr)
	{
		return 1 + my_strlen(arr + 1);
	}
}

函数没递归一次,进行判断如果没有0就加一在进行下一次递归
字符串函数及其模拟实现,掌握并运用字符串函数(1)——strlen,strcpy,strcmp_第5张图片

3.指针-指针

int my_strlen(char* arr)
{
	char* p1 = arr;
	while (*p1)
	{
		p1++;
	}
	return p1 - arr;
}

字符串函数及其模拟实现,掌握并运用字符串函数(1)——strlen,strcpy,strcmp_第6张图片

2.拷贝函数strcpy

char * strcpy ( char * destination, const char * source );
  • 这个函数有两个参数一个是目的地址,一个是源头,这个函数的作用就是把源函数复制到目的函数里面去
  • 源函数一定要有0为结尾
  • 目的函数一定要大于源函数
  • 目的函数可以改变
  • 字符串函数及其模拟实现,掌握并运用字符串函数(1)——strlen,strcpy,strcmp_第7张图片

模拟实现拷贝函数

字符串函数及其模拟实现,掌握并运用字符串函数(1)——strlen,strcpy,strcmp_第8张图片
把p2的的元素给p1直到遇到0结束,总体来说这个函数的模拟实现还是很好理解的。

3.模拟实现比较函数strcmp

int strcmp ( const char * str1, const char * str2 );
  • 这个函数也是一样有两个参数
  • 当第一个参数大于第二个参时返回大于0的数
  • 当第一个参数小于第二个参时返回小于0的数
  • 当第一个参数等于第二个参时返回等于0的数

模拟实现strcmp函数

int my_strcmp(const char* p1, const char* p2)
{
	while (*p1 == *p2)
	{
		if (p1 == '\0')
			return 0;
		p1++;
		p2++;
	}
	return *p1 - *p2;
}
int main()
{
	char arr1[] = { "ab" };
	char arr2[] = { "ac" };
	int ret=my_strcmp(arr1, arr2);
	printf("%d",ret);
	return 0;
}

字符串函数及其模拟实现,掌握并运用字符串函数(1)——strlen,strcpy,strcmp_第9张图片

总结

今天的内容就结束了,这三个函数是我们在C中运用最多的函数,我们一定要好好的掌握他们,看完文章之后也要自己去穷一敲代码,这样更帮助我们记忆。下一篇文章我们要学习别的函数。

你可能感兴趣的:(#+C语言,算法,c语言,c++,矩阵,线性代数)