几个字符串函数的使用和模拟实现(1)

下面介绍几个常见的字符串函数的使用并且学会自己创建实现与它们一样的功能,借此来巩固与字符串、函数、指针相关方面的知识。

strlen函数(头文件是<string.h>)

由此可见:

·strlen函数的返回值是返回值是size_t,是无符号的(在使用函数返回值进行加减运算判断两个字符串长度时容易发生错误)

·函数的形参是指向char的指针,由于只用来计算而不改变字符串内容,因此使用const

·使用指针在访问字符串内容时,访问到'\0'就停止,因此计算的长度是\0以前,不包括\0

 strlen的使用方法举例:

#include<stdio.h>
#include<string.h>

int main()
{
	const char arr1[] = "abcdef";
	const char arr2[] = "abc";
	
	size_t len1 = strlen(arr1);
	size_t len2 = strlen(arr2);
	
	printf("arr1的长度为:%d\narr2的长度为:%d", len1, len2);
	
	return 0;
}

使用strlen函数判断两个字符串长度大小

#include<stdio.h>
#include<string.h>

int main()
{
	const char* arr1 = "ab";
	const char* arr2 = "abc";
	
	if(strlen(arr1) - strlen(arr2) > 0)
		printf("arr1的字符串长度大于arr2\n");
	else if(strlen(arr1) - strlen(arr2) < 0)
		printf("arr1的字符串长度小于arr2\n");
	else
		printf("相等");

	return 0;
}

显而易见,在程序中arr1的字符串长度要小于arr2的,但是我们来看下程序运行结果:

还记得我上面说的它的返回值是size_t,无符号整形,就算结果是时-1,他也会转化为1

但是我们可以对他的返回值进行强制类型转换,借此达到目的:

	if((int)strlen(arr1) - (int)strlen(arr2) > 0)
		printf("arr1的字符串长度大于arr2\n");
	else if((int)strlen(arr1) - (int)strlen(arr2) < 0)
		printf("arr1的字符串长度小于arr2\n");
	else 
		printf("相等");

strlen的几种不同模拟的实现方法

计数器方式
#include<stdio.h>
#include<string.h>

int my_strlen(const char* str)
{
	int count = 0;
	
	
	while(*str)
	{
		count++;
		str++;
	}
	return count;
}
int main()
{
	const char* arr = "abcdef";
	
	int len = my_strlen(arr);
	printf("字符串的长度为%d", len);
	
	return 0;
}
不能创建临时变量的方式
#include<stdio.h>
#include<string.h>

int my_strlen(const char* str)
{
	if(*str == '\0')
		return 0;
	else
		return 1 + my_strlen(str + 1);
}
int main()
{
	const char* arr = "abcdef";
	
	int len = my_strlen(arr);
	printf("字符串的长度为%d", len);
	
	return 0;
}

此处采用函数递归调用的方式,即先进行递推直到结束调用,后进行回归,计算每次递推调用的返回值,没学到也不要紧,简单理解一下

指针——指针的方式
#include<stdio.h>
#include<string.h>

int my_strlen(const char* str)
{
	const char *p = str;
	
	while(*str != '\0')
	{
		str++;
	}
	return str - p;
}
int main()
{
	const char* arr = "abcdef";
	
	int len = my_strlen(arr);
	printf("字符串的长度为%d", len);
	
	return 0;
}

这种方式是利用指针减去指针得到的是两指针间的元素个数

有一点需要注意,我们要把str的地址先传给另一个指针,因为再进行str++时,此时指针已指向字符串str的‘\0’处

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学海无涯.苦作舟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值