C语言 strlen,strcpy,strcmp,strcat,strstr函数的使用及其模拟实现

目录

一、strlen函数

1.1 strlen 函数的使用

1.2 strlen函数的模拟实现

1.计数器方式

2.递归方式

3.指针-指针方式

二、strcpy函数

2.1 strcpy函数的使用

2.2 strcpy函数的模拟实现

三、strcmp函数

3.1 strcmp函数的使用

3.2 strcmp函数的模拟实现

四、strcat函数

4.1 strcat函数的使用

4.2 strcat函数的模拟实现

五、strstr函数

5.1 strstr函数的使用

5.2 strtsr函数的模拟实现


一、strlen函数

1.1 strlen 函数的使用

• 字符串以 '\0' 作为结束标志,strlen函数返回的是在字符串中 '\0' 前⾯出现的字符个数(不包含 '\0' )。

 • 参数指向的字符串必须要以 '\0' 结束。

• 注意函数的返回值为size_t是无符号的

• strlen的使用需要包含头文件<string.h>

可以看这么一个代码

#include <stdio.h>
#include <string.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;
}

看完这串代码,可能会有人觉得这串代码的结果会是str1>str2,毕竟3-6<0,但是上面说了strlen的返回结果为无符号整型,所以无符号的-3将会是一个大于0且很大的数,这串代码的结果应该是str2>str1。

1.2 strlen函数的模拟实现

1.计数器方式

int my_strlen(const char * str)
{
 int count = 0;
 while(*str)
 {
 count++;
 str++;
 }
 return count;
}

2.递归方式

int my_strlen(const char * str)
{
 assert(str);
 if(*str == '\0')
 return 0;
 else
 return 1+my_strlen(str+1);
}

3.指针-指针方式

int my_strlen(char *s)
{
 assert(str);
 char *p = s;
 while(*p != ‘\0’ )
 p++;
 return p-s;
}

二、strcpy函数

2.1 strcpy函数的使用

     strcpy可以将一个字符串内容拷贝到另一个字符串中,和strlen函数很相似的是以源字符串‘\0’为结束标志。

• 源字符串必须以 '\0' 结束。

• 会将源字符串中的 '\0' 拷贝到目标空间。

• 目标空间必须足够大,以确保能存放源字符串。

• 目标空间必须可修改。

2.2 strcpy函数的模拟实现

#include<stdio.h>
void mystrcmp(char* arr1, const char* arr2)\\目标字符串可以被修改,源字符串不可被修改
{
	while (*arr2 != '\0')\\拷贝以源字符串的'\0'为结束标志
	{
		*arr1 = *arr2;拷贝赋值
		arr1++;
		arr2++;
	}
}
int main()
{
	char arr1[10] = "";
	char arr2[10] = "abcdef";
	mystrcmp(arr1, arr2);
	printf("%s", arr1);
	return 0;
}

三、strcmp函数

3.1 strcmp函数的使用

    strcmp函数可以通过比较字符串的每个字符的ASCII码值来判断两个字符串是否相同

◦ 第⼀个字符串大于第⼆个字符串,则返回大于0的数字

◦ 第⼀个字符串等于第⼆个字符串,则返回0

◦ 第⼀个字符串小于第⼆个字符串,则返回小于0的数字

3.2 strcmp函数的模拟实现

int my_strcmp (const char * str1, const char * str2)
{
 int ret = 0 ;
 assert(src != NULL);
 assert(dest != NULL);
 while(*str1 == *str2)//字符相同就一直比较
 {
 if(*str1 == '\0')//当两个字符串都到了'\0'的位置,说明两个字符串相同。
 return 0;
 str1++;
 str2++;
 }
 return *str1-*str2;//有不同的字符,则比较该处字符的ASCII码值
}

四、strcat函数

4.1 strcat函数的使用

    stract函数可以将一个字符串的内容追加到另一个字符串中,源字符串在目标字符串‘\0’处开始追加。

• 源字符串必须以 '\0' 结束。

• 目标字符串中也得有 \0 ,否则没办法知道追加从哪里开始。

• 目标空间必须有足够的大,能容纳下源字符串的内容。

• 目标空间必须可修改。

4.2 strcat函数的模拟实现

#include<stdio.h>
void mystract(char* arr1, const char* arr2)\\目标字符串可修改,源字符串不可修改
{
	while (*arr1 != '\0')\\源字符串在目标字符串'\0'处开始追加
		arr1++;
	while (*arr2 != '\0')\\以源字符串'\0'结束追加
	{
		*arr1 = *arr2;追加赋值
		arr1++;
		arr2++;
	}
}
int main()
{
	char arr1[20] = "abcde";
	char arr2[20] = "fghij";
	mystract(arr1, arr2);
	printf("%s", arr1);
	return 0;
}

五、strstr函数

5.1 strstr函数的使用

    strstr函数返回子串str2在主串str1中第⼀次出现的位置,字符串的比较匹配不包含'\0'字符,以'\0'作为结束标志。

5.2 strtsr函数的模拟实现

char * strstr (const char * str1, const char * str2)
{
 char *cp = str1;
 char *s1, *s2;
 if ( !*str2 )
 return str1;
 while (*cp)
 {
 s1 = cp;
 s2 = str2;
 while ( *s1 && *s2 && !(*s1-*s2) )//找相同的字符
 s1++, s2++;
 if (!*s2)//跳出循环后如果此时子串已经遍历完了,说明已经找到了相同地方的位置了
 return(cp);
 cp++;
 }
 return(NULL);
}

 


 

    本篇内容就到这里了,希望对各位有帮助,如果有错误欢迎指出。

 

 

 

 

  • 28
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值