【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;
}

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

相关内容

热门资讯

五年级上册语文作文(精彩3篇... 五年级上册语文作文 篇一我最喜欢的动物我最喜欢的动物是熊猫。熊猫是中国的国宝,也是世界上最可爱的动物...
创新想象作文五年级400字2... 创新想象作文五年级400字26篇 篇一标题:未来的交通工具未来,交通工具将发生翻天覆地的变化。现在我...
五年级关于去肯德基作文大全【... 五年级关于去肯德基作文大全 篇一第一篇内容:我对肯德基的喜爱作为一个五年级的学生,我非常喜欢去肯德基...
五年级作文美丽就在我身边40... 篇一:美丽就在我身边五年级作文美丽就在我身边400字作文结尾 篇一通过写这篇作文,我深刻地感受到了身...
小学五年级书的作文400字【... 小学五年级书的作文400字 篇一我的好朋友我有一个好朋友,她叫小芳。她是我班上的同学,我们从一年级就...
漫画老师作文300字五年级上... 漫画老师作文300字五年级上册 篇一我喜欢的漫画老师我们学校有一位非常特别的老师,他就是我们的漫画老...
我的座右铭五年级作文(经典6... 我的座右铭五年级作文 篇一勇敢迎接挑战挑战是生活中不可避免的一部分。无论是学习上的困难,还是生活中的...
小学五年级母爱的作文600字... 小学五年级母爱的作文600字 篇一母爱是最伟大的妈妈是一个家庭中最重要的人,也是最伟大的人。她为我们...
我的妹妹五年级500字作文1... 我的妹妹五年级500字作文12篇 篇一标题:我和妹妹的五年级生活我是一个五年级的学生,而我的妹妹也刚...
小学五年级写信作文400字(... 小学五年级写信作文400字 篇一亲爱的爸爸妈妈:您好!我是你们的儿子,现在正在上小学五年级。我很想和...
杭州乐园游记五年级作文【精简... 杭州乐园游记五年级作文 篇一我喜欢杭州乐园终于盼到了暑假,我和家人一起来到了杭州乐园。杭州乐园是一个...
小学五年级作文博物馆21篇(... 小学五年级作文博物馆21篇 篇一:我的首次博物馆之旅今天,我们班级去了博物馆参观,这是我第一次去博物...
狼与狗的作文五年级【优秀6篇... 狼与狗的作文五年级篇一狼与狗是两种相似又不同的动物。狼是一种野生动物,而狗是人类驯化的宠物。它们在外...
孔雀五年级作文【精选6篇】 孔雀五年级作文 篇一我的宠物孔雀我有一只非常特别的宠物——孔雀。它拥有绚丽多彩的羽毛和优雅的姿态,每...
小学五年级母爱的作文400字... 小学五年级母爱的作文400字 篇一母爱的伟大在我们的成长过程中,母爱是我们最亲近的陪伴者。她们默默地...
小学五年级作文我多么快乐记叙... 小学五年级作文我多么快乐记叙文 篇一快乐的周末游玩周末终于来临了,我迫不及待地和爸爸妈妈一起计划着如...
午夜饭作文五年级13篇【精选... 午夜饭作文五年级13篇 篇一:午夜饭的美味与温暖午夜饭,是我小时候最喜欢的一餐。每当夜幕降临,家里的...
20年后的家乡五年级作文【精... 20年后的家乡五年级作文 篇一我热爱我的家乡,它是一个美丽的地方,有着清新的空气和绿色的大自然。在2...
牛奶五年级作文(精简6篇) 牛奶五年级作文 篇一牛奶是我们生活中常见的饮品,也是我们身体健康的重要来源之一。牛奶富含丰富的营养物...
小鸟的故事五年级作文(精选3... 小鸟的故事五年级作文 篇一小鸟的故事从古至今,小鸟一直是人们喜爱的动物之一。它们的形象可爱,羽毛绚丽...