字符串处理函数strlen,strcat,strcpy,strcmp的使用和模拟实现

strlen的使用和模拟实现

strlen的使用

strlen函数可以求出字符串(除了’\0’)的长度。

头文件

#include<string.h>

声明

size_t strlen(const char*str)

参数

str—>需求长度的数组。

返回值

无符号整型

实例:

在这里插入图片描述

strlen的模拟实现

1.指针移动

#include<stdio.h>
//指针移动
int My_strlen(char* p)
{
	int count = 0;
	while (*p)
	{
		count++;
		p++;
	}
	return count;
}
int main()
{
	char arr[] = "abcdefghi";
	printf("%d", My_strlen(arr));
	return 0;
}

2.函数递归求解

//递归求解
#include<stdio.h>
int my_strlen(char* arr)
{
    if(*arr == '\0')
        return 0;
    return my_strlen(arr+1)+1;
}
int main()
{
    char arr[] = "abcdef*";
    printf("%d",my_strlen(arr));
    return 0;
}

3.指针相减

//指针相减
#include<stdio.h>
int my_strlen(char* arr)
{
    char* temp = arr;
    while(*arr)
        arr++;
    int num = (int)(arr-temp);
    return num;
}
int main()
{
    char arr[] = "abcdef*";
    printf("%d",my_strlen(arr));
    return 0;
}

strcat的使用和模拟实现

strcat的使用

strcat函数可以把源字符串追加到目标字符串的结尾。

头文件

#include<string.h>

声明

char* strcat(chardest,const charsrc)

参数

dest—>destination,指向目标数组,包含字符串,且有足够的空间被追加字符串。
src—>sourse,指向源字符串(要追加的字符串)。

返回值

返回追加完后的字符串的指针dest,返回类型为char*。

实例:
#include<string.h>
#include<stdio.h>
int main()
{
	char str1[20] = "12345";
	char str2[] = "abcde";
	strcat(str1, str2);
	printf("%s", str1);
	return 0;
}

在这里插入图片描述

strlcat的模拟实现

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
char* My_Strcat(char* dest, char* src)
{
	char* begin = dest;
	while (*dest)
		dest++;
	while (*dest++ = *src++)
		;
	return begin;

}
int main()
{
	char str1[20] = "12345";
	char str2[] = "abcde";
	My_Strcat(str1, str2);
	printf("%s", str1);
	return 0;
}

strcpy的使用和模拟实现

strcpy的使用

strcpy可以将源字符串2内容复制到目标字符串1内。

头文件

#include<string.h>

声明

char * strcpy(char * destination,const char * sourse)

参数

destination—>目标地址,即用来复制的字符串。
sourse—>源字符串,即被复制的字符串。

返回值

返回值为以destination开始的地址。类型为char*

注意:

1.源字符串必须以’\0’结尾
2.strcpy函数会将源字符串内的’\0’也复制到目标空间内
3.目标字符串必须有足够的空间。
4.目标空间必须可修改

实例:

将str2内容复制到str1内。
在这里插入图片描述
在这里插入图片描述

strcpy的模拟实现

#include<stdio.h>
#include<assert.h>
void My_strcpy(char * dest,char * src)
{
	assert(dest!=NULL);//预防参数为空指针
	assert(src != NULL);
	while (*dest++ = *src++)//遍历交换两数组内容
	{
		;
	}
}
int main()
{
	char str1[20] = "**********";
	char str2[] = "我是天才";
	My_strcpy(str1, str2);
	printf("%s", str1);
	return 0;
}

strcmp的使用和模拟实现

strcmp通过比较两字符串对应位置字符的Ascll码值来比较大小。

strcmp的使用

头文件

#include<string.h>

声明

int strcmp(const char * str1,const char * str2)

参数

str1—>要比较的字符串1
str2—>要比较的字符串2

返回值

如果返回值大于零,则表示字符串1大于字符串2
如果返回值等于零,则表示字符串1等于字符串2
如果返回值小于零,则表示字符串1小于字符串2

实例:
#include<stdio.h>
#include<string.h>
int main()
{
	char str1[] = "abcdef";
	char str2[] = "abddef";
	if (strcmp(str1, str2) > 0)
	{
		printf("str1大于str2");
	}
	else if (strcmp(str1, str2) > 0)
	{
		printf("str1等于str2");
	}
	else
	{
		printf("str1小于str2");
	}

	return 0;
}

在这里插入图片描述

strcmp的模拟实现

#include<stdio.h>
int My_Strcmp(char* p1, char* p2)
{
	while (*p1 == *p2)
	{
		if (*p1 == '\0')
			return 0;
		p1++;
		p2++;
	}
	return *p1 - *p2;
}
int main()
{
	char str1[] = "abcd";
	char str2[] = "abdd";
	if (My_Strcmp(str1,str2) == 0)
	{
		printf(">");
	}
	else if (My_Strcmp(str1,str2) < 0)
	{
		printf("<");
	}
	else if (My_Strcmp(str1,str2) > 0)
	{
		printf(">");
	}
	return 0;
}
  • 59
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值