欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 能源 > 【C语言函数实现节选1】

【C语言函数实现节选1】

2024/10/24 23:28:34 来源:https://blog.csdn.net/2302_79546368/article/details/139611251  浏览:    关键词:【C语言函数实现节选1】

前言:

         通过前面的博客,C语言基本知识基本上我已给大家分享完成!接下来我会通过两篇博客结

合前面的知识实现一下常见的函数。实现方式不唯一,大家只要大体思路符合都是可以的,在学习

的过程中尽量自己先实现,实现完成之后再对照我的思路进行再实现,然后回过头再进行对照一遍。

       C语言大家已经学习好一段时间,接下来大家争取再消化一下,自己多敲一下代码,找一下练

习题。不要急于求成,入门和基础是非常重要的。有些知识要大家反复的去琢磨,通过敲代码进行

推敲验证。后面数据结构的学习我也会继续更新为大家分享相关知识点的总结。

1.strlen 函数的模拟实现

函数原型 -----size_t strlen ( const char * str )

 思路:      函数的功能是求字符串长度,所以我们需要遍历字符串的每个字符并计数,最后将返回

值返回。传地址时我们不需要修改其所指向的对象,所以用const进行维护。

#include <stdio.h>
#define n 100
size_t my_strlen(const char* p)
{int count = 0;while (*p++)count++;return count;
}
int main()
{char arr[n];gets(arr);printf("%d\n",my_strlen(arr));return 0;
}

2.strcpy 函数的模拟实现

函数原型----char * strcpy ( char * destination, const char * source )

函数功能: 该函数的作用是将原字符串中的内容拷贝到目标字符串中(包括终止字符)。它的返

回值是char*,即就是目标字符串的地址。

思路:      先将目标字符串的地址保存下来,再逐个进行拷贝,最后返回目标字符串的地址。

#include <stdio.h>
#include <assert.h>
#define N 100
char* my_strcpy(char* dest, const char* sour)
{assert(dest&&sour);char* ret = dest;while (*dest++ = *sour++)   //这样设计是非常巧妙的,完成了拷贝也起到终止条件的作用;return ret;
}
int main()
{char arr1[N] = "abcdef";char arr2[N];char* ret = my_strcpy(arr2, arr1);printf("%s\n", ret);return 0;
}

3.strcat 函数模拟实现

函数原型---char * strcat ( char * destination, const char * source )

 函数功能:strcat 函数是 C 语言中的字符串连接函数,用于将一个字符串连接到另一个字符串的

末尾。返回值为目标字符串的地址。

思路:先将目标字符串的地址保存下来,其次先找目标字符串的尾部,在进行尾部拷贝连接,最后

返回目标字符串的地址。

#include <stdio.h>
#include <assert.h>
#define N 100
char* my_strcat(char* dest, const char* sour)
{assert(dest && sour);char* ret = dest;  //先找尾while (*dest)//这里不能写成*dest++dest++;//连接while (*dest++ = *sour++);return ret;
}
int main()
{char arr1[N] = "abcdef";char arr2[N] = "ghijk";char* ret = my_strcat(arr1, arr2);printf("%s\n", ret);return 0;
}

4.strstr 函数的模拟实现

思路:函数原型-------char * strstr (  char * str1, const char * str2 )

函数功能:该函数在`str1`字符串中查找`str2`字符串的第一个出现位置,如果`str2`是`str1`的子

串,它会返回`str2`在`str1`中的起始位置的指针;如果`str2`不是`str1`的组成部分,则返回空指针

`NULL`。

思路:

1.先判断str2是否为空,如果为空就返回。

2.定义一个标记当前从str1中哪个位置开始比较的指针cur,定义s1每次比较时始终为当前cur的位置,s2为str2的起始位置。

3.在cur,s1,s2没到尾部的情况下,s1和s2相等的话就继续向后走进行比较。

4.当s2走到尾部就返回cur所标记   开始比较的位置。

5.其他情况都返回空指针。

#include <stdio.h>
char* my_strstr(const char* arr1, const char* arr2)
{char* s1 = NULL;char* s2 = NULL;char* cur = arr1;if (*arr2 == '\0')return (char*)arr1;while (*cur){s1 = cur;s2 = arr2;while (*s1 != '\0' && *s2 != '\0' && *s1 == *s2){s1++;s2++;}if (*s2 == 0)return (char*)cur;cur++;}return NULL;
}
int main()
{char arr1[] = "ahjhjabh";char arr2[] = "b";char* ret = my_strstr(arr1, arr2);if (ret == NULL)printf("Ҳ\n");elseprintf("%s", ret);return 0;
}

以上内容,如有错误,还望指出!

关注博主,优质内容不断更新!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com