【C语言进阶】字符串函数(重置版与加强版)
创始人
2024-06-03 12:53:40
0

道虽迩,不行不至;事虽小,不为不成。                  ——《荀子·修身》

目录

什么是字符串函数?

一.strlen函数

1.strlen函数它的功能和注意事项:

2.实现strlen函数:

3.模拟实现strlen函数 

 二.strcpy函数

1.strcpy函数它的功能和注意事项

2.实现strcpy函数:

3.模拟实现strcpy函数

三.strcat函数

1.strcat函数它的功能和注意事项

2.实现strcat函数

3.模拟实现strcat函数

 ​编辑

四.strcmp函数 

1.strcmp函数它的功能和注意事项

2.实现strcmp函数 

3.模拟实现strcmp函数

五.strstr函数

1.strstr函数它的功能和注意事项

 2.实现strstr函数

3.模拟实现strstr函数

六.strncmp函数,strncpy函数,strncat函数 


什么是字符串函数?

字符串函数就是对字符串进行一系列的操作,如求字符串长度,拷贝字符串,字符串尾接,字符串比较等等。一系列的函数,今天我们将把这些函数的实现以及模拟实现进行一一的讲解。希望对你有所帮助。创作不易,希望各位老表能赏点赞吃。

一.strlen函数

1.strlen函数它的功能和注意事项:

strlen函数是求一个字符串函数的长度,求的是'\0'之前出现的字符个数,不包括'\0'。

如果你把字符串数组写成这样:char arr[] = { 'a','b','c' },这里面就没有以'\0'为结尾的结束标志,求出来的就是随机值

所以我们在初始化字符串时,一定要初始化为以'\0'为结尾的字符串。这样才能使用strlen函数准确的求出字符串长度。

2.实现strlen函数:

#include
#include//字符串函数必须要的头文件
int main()
{char arr[] = "abcdef";//结尾还有一个\0结尾,数组大小为7int len = strlen(arr);printf("%d\n", len);return 0;
}

3.模拟实现strlen函数 

对于模拟实现strlen函数我们使用三种方法:第一种计数器,第二种指针减指针,第三种递归。

第一种:计数器

//计数器,创建一个变量来统计字符的个数
int my_strlen(char* str)
{assert(str);int count = 0;while (*str != '\0'){count++;str++;}return count;
}
int main()
{char arr[] = "Hello";int len = my_strlen(arr);printf("%d\n", len);return 0;
}

第二种:指针减指针

#include//断言所需要的头文件
int my_strlen(char* str)
{assert(str);//指针我们一般都会断言一下,更加规范char* start = str;//指向首位置的指针while (*str != '\0'){str++;}return str - start;//末位置减首位置的指针就是字符串的个数
}
int main()
{char arr[] = "Hello";int len = my_strlen(arr);printf("%d\n", len);return 0;
}

第三种递归:如果题目说不能创建临时变量,就可以使用递归来实现。

int my_strlen(char* str)
{assert(str);if (*str != '\0')return 1 + my_strlen(str + 1);elsereturn 0;
}
int main()
{char arr[] = "Hello";int len = my_strlen(arr);printf("%d\n", len);return 0;
}

 二.strcpy函数

1.strcpy函数它的功能和注意事项

strcpy函数的功能:将源字符串的内容拷贝到另目标空间的字符串上面去。

注意事项:源字符串必须以'\0'结尾

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

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

                  目标空间必须可变。

strcpy函数的返回值是目标字符串的首地址。 

2.实现strcpy函数:

int main()
{char arr1[] = "abcdef";char arr2[] = "##########";strcpy(arr2, arr1);//注意顺序,把arr1的内容拷贝到arr2中printf("%s\n", arr2);return 0;
}

3.模拟实现strcpy函数

char* my_strcpy(char* dest, char* str)
{assert(dest && str);char* start = dest;while (*dest = *str)//从起始位置开始拷贝字符串{dest++;str++;}return start;
}
int main()
{char arr1[] = "abcdef";char arr2[] = "##########";my_strcpy(arr2, arr1);printf("%s\n", arr2);return 0;
}

三.strcat函数

1.strcat函数它的功能和注意事项

strcat函数的功能:源字符串尾接到目的字符串上面。源字符串的首字符把目的字符串的'\0'开始尾接,直到遇到源字符串的'\0',即尾接结束。

举个例子: 

注意事项:目标字符串的大小必须足够大,大到能够放下两个数组的大小和。 

                  目标字符串的空间必须可改变

2.实现strcat函数

int main()
{char arr1[20] = "Hello ";char arr2[] = "world";strcat(arr1, arr2);printf("%s\n", arr1);
}

3.模拟实现strcat函数

char* my_strcat(char* dest, char* str)
{assert(dest && str);char* start = dest;while (*dest)//把目标字符串遍历完到'\0'{dest++;}while (*dest = *str)//刚开始dest为'\0',开始尾接{dest++;str++;}return start;
}
int main()
{char arr1[20] = "Hello ";char arr2[] = "world";my_strcat(arr1, arr2);printf("%s\n", arr1);
}

 

四.strcmp函数 

1.strcmp函数它的功能和注意事项

strcmp函数的功能:strcmp中的cmp就是单词compare(比较)的意思。顾名思义strcmp函数就是比较两个字符串,而比较字符串的时候,比较的是字符ACSll值的大小。 

两个字符串比较是一个一个字符比较,一个字符串中的字符的ASCll值大于另一个字符串中的字符的ASCll值,如果大于就返回大于1的数字;如果小于就返回小于去的数字;如果相等就返回0。

举个例子:

这里给大家分享一个ASCll表: 

返回值: 

2.实现strcmp函数 

int main()
{char arr1[] = "abcd";char arr2[] = "ad";int ret=strcmp(arr1, arr2);printf("%d\n", ret);return 0;
}

3.模拟实现strcmp函数

int my_strcmp(char* str1, char* str2)
{assert(str1 && str2);while (*str1 = *str2)//如果两个字符相等,则继续找下一个字符{if (*str1 == '\0')//如果比较完了,就返回0{return 0;}str1++;str2++;}if (*str1 > *str2)return 1;elsereturn -1;
}
int main()
{char arr1[] = "abcd";char arr2[] = "ad";int ret=my_strcmp(arr1, arr2);printf("%d\n", ret);return 0;
}

五.strstr函数

1.strstr函数它的功能和注意事项

strstr的功能:strstr (str1,str2) 函数用于判断字符串str2是否是str1的子串。 如果是,则该函数返回 str1字符串从 str2第一次出现的位置开始到 str1结尾的字符串;否则,返回NULL。

功能:strstr返回一个指针,指向string2在string1中首次出现的位置。

举个栗子:

 2.实现strstr函数

int main()
{char arr1[] = "abbbcd";char arr2[] = "bbc";char* p = strstr(arr1, arr2);if (p == NULL)printf("没找到\n");elseprintf("%s\n", p);return 0;
}

3.模拟实现strstr函数

 正确的方法:

 

char* my_strstr(char* str1, char* str2)
{assert(str1 && str2);char* s1 = NULL;char* s2 = NULL;char* temp = str1;while (*temp){s1 = temp;s2 = str2;//下一个循环之后,s2始终被赋值为arr2的首地址while (*s1&&*s2&&*s1 == *s2)//如果不相等或者遇到'\0'就退出循环{s1++;s2++;}if (*s2== '\0')//s2是那个找的子字符串,更短,所以这里判断s2{return temp;}temp++;//每一次使temp指向下一个位置}return NULL;
}
int main()
{char arr1[] = "abbbcd";char arr2[] = "bbc";char* p = my_strstr(arr1, arr2);if (p == NULL)printf("没找到\n");elseprintf("%s\n", p);return 0;
}

六.strncmp函数,strncpy函数,strncat函数 

这几个函数都是strcmp函数,strcpy函数,strcat函数的变形,也就是在中间加了一个n,这个你的意思就是想要操作几个字符。其实功能和那几个函数是一致的。

它们是不受长度的限制的。

 strncpy函数:

int main()
{char arr1[] = "abcdef";char arr2[] = "######";strncpy(arr2, arr1,3);//只拷贝三个字符printf("%s\n", arr2);return 0;
}

strncmp函数: 

int main()
{char arr1[] = "abcdef";char arr2[] = "abd";//按理说arr2应该大于arr1,但是这里只有两个字符比较,故应相等int ret=strncmp(arr2, arr1, 2);printf("%d\n", ret);return 0;
}

strncat函数 : 

int main()
{char arr1[] = "abcdef";char arr2[10] = "bit";strncat(arr2, arr1, 5);printf("%s\n", arr2);return 0;
}

全部的内容到这里也就结束了,望各位看官老爷点点赞,谢谢! 

相关内容

热门资讯

导游词结束语怎么写 导游词结束语怎么写  结束语1  各位朋友几天的行程,还有10分钟就要结束了,在此刻要和大家说再见的...
上海南浦大桥导游词 上海南浦大桥导游词  竣工通车于1991年12月1日的南浦大桥,总长8346米,通航净高46米,5....
贵阳河滨公园导游词 贵阳河滨公园导游词  作为一位无私奉献的导游,总归要编写导游词,一篇完整的导游词,其结构一般包括习惯...
天生三桥导游词 关于天生三桥导游词范文(通用9篇)  作为一位出色的导游人员,有必要进行细致的导游词准备工作,借助导...
西安兵马俑英文导游词 西安兵马俑英文导游词(通用10篇)  作为一名优秀的导游,通常需要准备好一份导游词,一篇完整的导游词...
丽江古城中英文导游词 丽江古城中英文导游词  丽江古城被列入世界文化遗产后,丽江的旅游业达到顶峰,成为世人向往的世外桃源、...
观音山导游词 观音山导游词范文  作为一位杰出的导游,很有必要精心设计一份导游词,导游词具有形象、生动、具有感染力...
庐山导游词 庐山导游词(精选4篇)  作为一名专门引导游客、助人为乐的导游,就不得不需要编写导游词,借助导游词可...
大同云冈石窟导游词 大同云冈石窟导游词  云冈石窟佛教艺术按石窟形制、造像内容和样式的发展,小编收集了大同云冈石窟导游词...
明孝陵导游词 明孝陵导游词10篇  作为一名默默奉献的导游,可能需要进行导游词编写工作,导游词具有注重口语化、精简...
无锡九龙灌浴导游词 无锡九龙灌浴导游词  作为一名专门为游客提供优质服务的导游人员,可能需要进行导游词编写工作,导游词由...
灯塔风景区优秀导游词 灯塔风景区优秀导游词  你知道日照吗?日照,取自太阳照耀,就是这样一个太阳照耀下的城市,这里的灯塔风...
金寨红军广场导游词 金寨红军广场导游词  你知道金寨红军广场的来历吗?你知道金寨红军广场的导游词应该怎么写嘛。下面就由小...
山东地下大峡谷景点讲解导游词 山东地下大峡谷景点讲解导游词  各位**游客朋友,你们好!欢迎大家光临山东地下大峡谷旅游区观光游览。...
苏州简介及特色导游词 苏州简介及特色导游词  玄妙观是一座有着1300年历史的恢宏道教建筑群,主殿是九开间的重檐歇山顶的三...
苏州导游词 苏州导游词范文(精选5篇)  作为一名旅游从业人员,时常会需要准备好导游词,导游词是我们引导游览时使...
鸳鸯溪导游词 鸳鸯溪导游词  作为一位兢兢业业的旅游从业人员,就难以避免地要准备导游词,借助导游词可以更好地宣传景...
大理导游词 大理导游词范文(精选8篇)  作为一位不辞辛劳的导游,就难以避免地要准备导游词,导游词可以加深游客对...
四川导游词节选 四川导游词节选  四川,简称为“蜀”,历史悠久。在古代称为巴蜀,是古代巴人和蜀人的发祥地,这片土地孕...
鸟的天堂导游词 鸟的天堂导游词精选15篇  作为一名专门为游客提供优质服务的导游人员,编写导游词是必不可少的,导游词...