字符串函数strlen的用法实现(strcpy、strcat、strcmp)


前言

本文主要介绍字符函数和字符串函数的使用以及相应的实现过程,进一步加深了解C语言中字符和字符串的相关库函数。


一、求字符串长度

在c语言中,求字符串的长度用 strlen 函数。

strlen

其标准格式为: size_t strlen ( const char * str );
该函数参数为const修饰的字符指针,其返回值为无符号整型(size_t)。
该函数在使用过程中要注意以下几点:
(1)strlen函数求解字符串的长度不包括 \0
即字符串已经 ‘\0’ 作为结束标志,strlen函数返回的是在字符串中 ‘\0’ 前面出现的字符个数。
(2)求解的字符串必须要以 ‘\0’ 结束。

例1:求解字符串长度

#include<stdio.h>
int main()
{
    
    

	char* a = "hfoervve";
	int ret = strlen(a);
	printf("%d\n", ret);
	return 0;
}

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

例2:若求解字符串中没有包含 \0,即:

#include<stdio.h>
int main()
{
    
    

	char a[] = {
    
    'a','b','c','d'};
	int ret = strlen(a);
	printf("%d\n", ret);
	return 0;
}

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

该值为随机值(即返回数组a 后出现的第一个\0)

例3:strlen函数的返回值为size_t(无符号整型)

#include <stdio.h>
int main()
{
    
    
	const char* str1 = "abcdef";
	const char* str2 = "bbb";
	if (strlen(str2) - strlen(str1) > 0)
	{
    
    
		printf("str2>str1\n");
	}
	else
	{
    
    
		printf("srt1>str2\n");
	}
	return 0;
}

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

例4:模拟实现strlen 函数

#include<stdio.h>
#include<string.h>
#include<assert.h>
int my_strlen(const char* str)
{
    
    
	int count = 0;
	while (*str)
	{
    
    
		count++;
		str++;
	}
	return count;
}
int main()
{
    
    
	char* a = "jfoefnosdncosjf";
	int ret1=strlen(a);
	int ret2 = my_strlen(a);
	printf("%d\n", ret1);
	printf("%d\n", ret2);
	return 0;
}

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


二、字符串拷贝函数

strcpy

其标准格式为: char * strcpy(char * destination, const char * source );

该函数参数分为目的字符串(char * destination)和源字符串(const char * source)。其返回值为字符指针类型。
该函数在使用过程中要注意以下几点:
(1)源字符串必须以 ‘\0’ 结束。即要保证拷贝的字符串的完整性。
(2)strcpy函数会将源字符串中的 ‘\0’ 拷贝到目标空间。
(3)目标空间必须足够大,以确保能存放源字符串。

例1:拷贝字符串

#include<stdio.h>
#include<string.h>
int main()
{
    
    
	char a1[] = "vndfjvbdfivnkx";
	char  a2[] = "ndijifhons";
	strcpy(a1, a2);
	printf("%s\n", a1);
	return 0;
}

结果:
在这里插入图片描述
例2:模拟实现字符串拷贝函数

#include<stdio.h>
#include<string.h>
#include<assert.h>
char* my_strcpy(char* a1, const char* a2)
{
    
    
	assert(a1 != NULL);
	assert(a2 != NULL);
	char* ret = a1;
	while (*a2 != '\0')
	{
    
    
		*a1++ = *a2++;
	}
	*a1 = *a2;
	return ret;//返回目的空间的起始地址
}
int main()
{
    
    
	char a1[] = "vndfjvbdfivnkx";
	char  a2[] = "ndijifhons";
	strcpy(a1, a2);
	printf("%s\n", a1);
	my_strcpy(a1, a2);
	printf("%s\n", a1);
	return 0;
}

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


三、字符串追加函数

strcat

其标准格式为: char * strcat ( char * destination, const char * source );

该函数参数分为目的字符串(char * destination)和源字符串(const char * source)。其返回值为字符指针类型。
该函数在使用过程中要注意以下几点:
(1)源字符串必须以 ‘\0’ 结束。
(2)目标空间必须有足够的大,能容纳下源字符串的内容。
(3)目标空间必须可修改。

例1:实现字符串追加

#include<stdio.h>
#include<string.h>
int main()
{
    
    
	char a1[30] = "fnwieubicn";
	char a2[] = "ivni";
	strcat(a1, a2);
	printf("%s\n", a1);
	return 0;
}

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

例2:模拟实现字符串追加函数

#include<stdio.h>
#include<string.h>
#include<assert.h>
//模拟实现strcat
char* my_strcat(char* b, char* a)
{
    
    
	char* ret = b;
	while (*a != '\0')
	{
    
    
		*b++ = *a++;
	}
	return ret;
};
int main()
{
    
    
	char a1[30] = "fnwieubicn";
	char a2[] = "ivni";
	strcat(a1, a2);
	printf("%s\n", a1);
	my_strcat(a1, a2);
	printf("%s\n", a1);
}

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


四、字符串的比较

strcmp

其标准格式为: int strcmp (const char * str1, const char * str2 );

该函数参数为两个字符串,其返回值为整型(int)。
该函数在使用过程中要注意以下几点:
(1)第一个字符串大于第二个字符串,则返回大于0的数字。
(2)第一个字符串等于第二个字符串,则返回0。
(3)第一个字符串小于第二个字符串,则返回小于0的数字。

例1:实现字符串的比较

#include<stdio.h>
#include<string.h>
int main()
{
    
    
	char* p1 = "vfdvbdb";
	char* p2 = "nevnoe";
	int ret = strcmp(p1, p2);
	printf("%d\n", ret);
	return 0;
}

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

例2:字符串比较函数的实现

#include<stdio.h>
#include<string.h>
#include<assert.h>
int my_strcmp(const char* p1, const char* p2)
{
    
    
	assert(p1 != NULL && p2 != NULL);
	while (*p1 == *p2)
	{
    
    
		if (*p1 == '\0')
		{
    
    
			return 0;
		}
		p1++;
		p2++;
	}
	if (*p1 > *p2)
	{
    
    
		return 1;
	}
	else if (*p1 < *p2)
	{
    
    
		return -1;
	}
}
int main()
{
    
    
	char* p1 = "vfdvbdb";
	char* p2 = "nevnoe";
	int ret = strcmp(p1, p2);
	printf("%d\n", ret);
	int ret1 = my_strcmp(p1, p2);
	printf("%d\n", ret1);
	return 0;
}

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


总结

以上就是本文的全部内容。

猜你喜欢

转载自blog.csdn.net/m0_53689542/article/details/122628675
今日推荐