字符串函数:strlen函数,strcpy函数,strcat函数,strcmp函数

1.字符串函数strlen

(1)strlen函数

strlen函数返回的是在字符串中’\0’前面出现的字符的个数

(2)strlen的使用

a.代码

#include<stdio.h>
#include<string.h>
int main()
{
    
    
	char str1[] = "abcdef";
	printf("%d\n", strlen(str1));
	return 0;
}

b.运行结果

在这里插入图片描述

(3)模拟实现strlen函数

在这里插入图片描述

a.代码

#include<stdio.h>
#include<string.h>
size_t MyStrlen(const char* str1)
{
    
    
	size_t len = 0;
	while (*str1 != 0)
	{
    
    
		++len;
		++str1;
	}
	return len;
}
int main()
{
    
    
	char* str1 = "abcdef";
	printf("%d\n", MyStrlen(str1));
	return 0;
}

b.运行结果

在这里插入图片描述

(4)注意:

a.指针在传递(赋值,传参数)的过程中,权限不能放大,只能缩小
在这里插入图片描述
b.typedef unsigned int size_t
size_t就是无符号的整型

2.字符串函数strcpy

(1)strcpy函数

在这里插入图片描述
strcpy是覆盖拷贝,将source全覆盖拷贝到destination,会把’\0’也拷过去,且必须考虑destination的空间够不够
(destination的空间必须>=source的空间)

(2)strcpy的使用

a.代码

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main()
{
    
    
	char p1[] = "abcdef";
	char* p2 = "hello";
	strcpy(p1, p2);
	printf("%s\n", p1);
	printf("%s\n", p2);
	return 0;
}

b.运行结果

在这里插入图片描述

c.错误举例

代码:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main()
{
    
    
	char p1[] = "abcdef";
	char* p2 = "hello";
	const char* p3 = "world";
	strcpy(p2, p3);
	printf("%s\n", p2);
	printf("%s\n", p3);
	return 0;
}

运行结果:
在这里插入图片描述
错误分析:
在这里插入图片描述

(3)模拟实现strcpy

a.代码

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
void MyStrcpy(char * dst, const char * src)
{
    
    
	while (*src)
	{
    
    
		*dst = *src;
		++src;
		++dst;
	}
	*dst = '\0';
}
int main()
{
    
    
		char p1[] = "abcdef";
		const char* p2 = "hello";
		MyStrcpy(p1, p2);
		printf("%s\n", p1);
		printf("%s\n", p2);
	return 0;
}

b.运行结果
在这里插入图片描述

3.字符串函数strcat

(1)strcat函数

在这里插入图片描述
strcat追加拷贝,追加到目标空间后面,目标空间必须足够大,能容纳下源字符串的内容

(2)strcat的使用

a.代码

#include<stdio.h>
#include<string.h>
int main()
{
    
    
	char p1[20] = "hello";
	const char* p2 = " world";
	strcat(p1, p2);
	printf("%s\n",p1);
	return 0;
}

b.运行结果

在这里插入图片描述

(3)模拟实现strcat

a.代码

#include<stdio.h>
#include<string.h>
void MyStrcat(char* dst, const char * src)
{
    
    
	//让dst指向'\0'位置
	while (*dst != '\0')
	{
    
    
		++dst;
	}
	//让dst从'\0'开始,将src赋值给dst
	while (*dst = *src)
	{
    
    
		++dst;
		++src;
	}
	*dst = '\0';
}
int main()
{
    
    
	char p1[20] = "hello";
	const char* p2 = " world";
	MyStrcat(p1, p2);
	printf("%s\n",p1);
	return 0;
}

b.运行结果

在这里插入图片描述

4.字符串函数strcmp

(1)strcmp函数

在这里插入图片描述
strcmp比较两个字符串的大小,一个字符一个字符比较,按ASCLL码比较
标准规定:
第一个字符串大于第二个字符串,则返回大于0的数字
第一个字符串等于第二个字符串,则返回0
第一个字符串小于第二个字符串,则返回小于0的数字

(2)strcmp的使用

a.代码

#include<stdio.h>
#include<string.h>
int main()
{
    
    
	char* p1 = "abcdef";
	char* p2 = "abcdef";
	char* p3 = "abcd";
	char* p4 = "bcde";
	printf("%d\n", strcmp(p1,p2 ));
	printf("%d\n", strcmp(p1,p3 ));
	printf("%d\n", strcmp(p3,p4 ));
}

b.运行结果

在这里插入图片描述

(3)模拟实现strcmp

a.代码

#include<stdio.h>
#include<string.h>
int MyStrCmp(const char * str1, const char * str2)
{
    
    
	//逐个元素比较
	while (*str1 && *str2)
	{
    
    
		if (*str1 > *str2)
		{
    
    
			return 1;
		}
		else if (*str1 < *str2)
		{
    
    
			return -1;
		}
		else //如果两个元素相等,进入下一个继续比较
		{
    
    
			++str1;
			++str2;
		}
	}
	//str2比较完了,str1还有
	if (*str1)
	{
    
    
		return 1;
	}
	//str1比较完了,str2还有
	else if (*str2)
	{
    
    
		return -1;
	}
	//str1等于str2
	else
	{
    
    
		return 0;
	}
}
int main()
{
    
    
	char* p1 = "abcd";
	char* p2 = "abcd";
	char* p3 = "abcde";
	char* p4 = "bcd";
	char* p5 = "b";
	printf("%d\n", MyStrCmp(p1,p2 ));
	printf("%d\n", MyStrCmp(p1,p3 ));
	printf("%d\n", MyStrCmp(p1,p4 ));
	printf("%d\n", MyStrCmp(p4,p5 ));
	return 0;
}

b.运行结果

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_50886514/article/details/112606595
今日推荐