字符串,字符串函数 strlen和sizeof和string库包含的函数等(1)

这些只能比较字符串,和char型的数组,int型的无法比较

1.strlen函数

strlen 函数使用时包含 #include<string.h>头文件

计算的是字符串的长度,一直识别到“/0”才结束,不包含/0

如果给定的字符串中不包含/0,则会产生一个随机值,因为strlen函数没有识别到/0

 

第一个arr 输出的len值则是6而第二个放bit的arr数组中输出的len值则为一个随机值

而strlen则返回的是无符号整型,size_t的  也就是  只有正整数 没有负数

2.模拟实现strlen函数

   const char*str为该指针是一个常量 无法修改该指针的大小,防止应用时出现错误。

而assert 为断言 该指针不为空,如果为空则会报错

 3.strcopy

 char *strcpy(char *dest, const char *src) 把 src 所指向的字符串复制到 dest

需要注意的是如果目标数组 dest 不够大,而源字符串的长度又太长,可能会造成缓冲溢出的情况。

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<assert.h>
char* my_strlen(char* dest, const char* post)
{
	assert(dest && post);
	char * ret =dest ;
	while ( *post != '\0')
	{
		*dest++ = *post++;
	}
	return  ret;
}
int main()
{
	//模拟实现字符串的拷贝函数
	char arr[5] = "abcd";
	char arr1[3] = "ef";
	my_strlen(arr, arr1);
	printf("%s", arr);
	return 0;
}
//  1.     int main()
//{
//	char arr[5] = "abcd";
//	char arr1[3] = "ef";//默认后面有一个/0  
//	//而strcpy在拷贝时 会遇到/0自动停止拷贝
//	//而arr前面较长的cd则会被覆盖
//	//strcpy(arr, arr1);写法1,数组arr必须足够长 才能够把arr1中的内容拷贝进去  
//	strcpy(arr, "efg");//写法二
//	printf("%s", arr);
//	return 0;
//}

4.strcat

strcat字符串追加   char *strcat(char *dest, const char *src) 把 src 所指向的字符串追加到 dest 所指向的字符串的结尾

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
char* my_stract(char* arr, const char* arr1)
{
	char* ret = arr;
	while (*arr != '\0')
	{
		arr++;
	}
	while(*arr++=*arr1++)
	{ }
	return ret;
}
int main()
{

	char arr[20] = "hello ";
	char arr1[] = "world";
	
	//strcat(arr, arr1);
	my_stract(arr, arr1);
	printf("%s", arr);
	return 0;
}

这是c语言代码,模拟实现字符串的追加

5. strcmp

 int strcmp(const char *str1, const char *str2) 把 str1 所指向的字符串和 str2 所指向的字符串进行比较   值得我们注意的是 该函数是int型的  返回的值是大于0 等于0 和小于0的三个数字

字符串比较的不是比较字符串的长度,比较的是字符的大小  例如

abcde     

abd  这两个字符串  a和a比相同  b和b比相同,然后c和d比 发现d比c大,而比较的是字符中的 ascii  所以返回的是第二个字符串大   

下面我们用c语言模拟实现这个函数

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<assert.h>
int  my_strcmp(const char* arr, const char* arr1)
{
	assert(arr && arr1);
	while (*arr == *arr1)
	{
		if (*arr == '\0')
		{
			return 0;
		}
		arr++;
		arr1++;
	}
	if (*arr > *arr1)
	{
		return 1;
	}
	else 
		return -1;
	
}
int main()
{
	char arr[10] = "abc";
	char arr1[10] = "abcd";
	int ret = my_strcmp(arr, arr1);
	if (ret > 0)
	{
		printf("大于");
	}
	if (ret == 0)
	{
		printf("等于");
	}
	if(ret<0)
	{
		printf("小于");
	}
		return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

三氧化真

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

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

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

打赏作者

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

抵扣说明:

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

余额充值