【C语言】字符函数和字符串函数

前言:

作者简介:爱吃大白菜1132

人生格言:纸上得来终觉浅,绝知此事要躬行

 

如果文章知识点有错误的地方不吝赐教,和大家一起学习,一起进步!

 

如果觉得博主文章还不错的话,希望三连支持!

目录

1.strlen()函数

函数参数

返回值

strlen()函数模拟

2.strcpy()函数

函数参数

返回值

strcpy()函数模拟

3.strcat()函数

函数参数

返回值

strcat()函数模拟

4.strcmp()函数

函数参数

返回值

strcmp()函数模拟

5.strtok()函数

函数参数

返回值

6.strstr()函数

函数参数

返回值

strstr()函数模拟


1.strlen()函数

定义:strlen()函数是计算字符串长度的函数,将字符串中的 '\0' 作为结束标志,strlen函数返回的是在字符串中 '\0' 前面出现的字符个数(不包 含 '\0' )。


函数参数

strlen(const char* str)

返回值

无符号数


strlen()函数模拟

#include <stdio.h>
#include  <assert.h>
size_t my_strlen(const char* str)
{
    assert(str);//判断数组是否为空
	char* start = str;
	char* end = str;
	while (*end != '\0')
	{
		end++;
		
	}
	return end - start;
}
int main()
{
	char arr[] = "abcde";
	int ret = my_strlen(arr);
	printf("%d\n ", ret);
	return 0;
}

图解:

2.strcpy()函数

定义:strcpy()函数是复制字符的函数,将源字符串拷贝到目标空间,源字符串必须以 '\0' 结束。 目标空间必须足够大,以确保能存放源字符串, 目标空间必须可变。


函数参数

//第一个是目标地址,第二个是源地址
char* strcpy(char*dest,const char* src)

返回值

字符串


strcpy()函数模拟

#include <stdio.h>
char* my_strcpy(char* a1, const char* a2)
{
	assert(a1 && a2);//断言
	char* ret = a1;
	while (*a1++ = *a2++)
	{
		;
	}
	return a1;
}

int main()
{
	char arr1[] = "abi";
	char arr2[] = "abc";
	char ret=my_strcpy(arr1, arr2);

	printf("%s", ret);
	return 0;
}

3.strcat()函数

定义:strcat()函数将源字符串的副本追加到目标字符串。目标中的终止空字符被的第一个字符覆盖,并且空字符包含在由目标中两者的串联组成的新字符串的末尾。源字符串必须以 '\0' 结束。 目标空间必须有足够的大,能容纳下源字符串的内容。 目标空间必须可修改。


函数参数

//第一个是目标地址,第二个是源地址
char* strcat(char* dest, const char* src)

返回值

字符串


strcat()函数模拟


char *mystrcat(char *dest,const char *src)
{
	char *start = dest;
	while (*dest != '\0')
	{
		dest++;
	}
	while (*dest++ = *src++)
	{
		;
	}
	return start;
}
int main()
{
	char dest[100] = "abc";
	char src[] = "def";
	printf("%s\n",mystrcat(dest,src));
 
 
 
	return 0;

}

4.strcmp()函数

定义:对字符串进行比较,比较内容是ASCII码。


函数参数

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

返回值

大小比较返回值
一个字符串大于第二个字符串返回大于0的数字
一个字符串等于第二个字符串返回等于0的数字
一个字符串小于第二个字符串返回小于0的数字

strcmp()函数模拟

int my_strcmp(const char* a1,const char* a2)
{
	assert(a1 && a2);
	while (*a1==*a2)
	{
		if (*a1 == '\0')
		{
			return 0;
		}
		a1++;
		a2++;
	}
	return *a1 - *a2;
}
int main()
{
	char arr1[] = "abi";
	char arr2[] = "abc";
	int ret=my_strcmp(arr1, arr2);
	printf("%d", ret);
	return 0;
}

5.strtok()函数

定义:将str字符串按照sep数组中所给的分隔符将其分割。会使用'\0'分割。

strtok函数会改变被操作的字符串,所以在使用strtok函数切分的字符串一般都是临时拷贝的内容并且可修改。


函数参数

char* strtok ( char* str, const char* sep );
//第一个参数指定一个字符串,它包含了0个或者多个由sep字符串中一个或者多个分隔符分割的标
记。
//果字符串中不存在更多的标记,则返回 NULL 指针。

返回值

strtok函数的第一个参数不为 NULL ,函数将找到str中第一个标记,strtok函数将保存它在字符串 中的位置。

strtok函数的第一个参数为 NULL ,函数将在同一个字符串中被保存的位置开始,查找下一个标 记。

6.strstr()函数

定义:str1是总串,str2是需要匹配的第一个字串位置。


函数参数

char * strstr ( const char *str1, const char * str2);

返回值

返回值为char*类型,如果找不到则返回空指针(NULL)

strstr()函数模拟

char *  strstr (const char * str1, const char * str2)
{
        char *cp = (char *) str1;
        char *s1, *s2;
        if ( !*str2 )
            return((char *)str1);
        while (*cp)
       {
                s1 = cp;
                s2 = (char *) str2;
                while ( *s1 && *s2 && !(*s1-*s2) )
                        s1++, s2++;
                if (!*s2)
                        return(cp);
                cp++;
       }
        return(NULL);

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

爱吃大白菜  

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

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

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

打赏作者

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

抵扣说明:

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

余额充值