首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >自定义实现字符串函数

自定义实现字符串函数

作者头像
我与梦想有个约会
发布2023-10-20 16:18:00
发布2023-10-20 16:18:00
25000
代码可运行
举报
文章被收录于专栏:jiajia_dengjiajia_deng
运行总次数:0
代码可运行

C语言库函数中strlen、strcmp、strcpy、strcat是我们非常常用的一些字符串处理函数,我们不得不了解一下内部的工作原理,有必要思考如果没有这些库函数我们该如何实现这些函数的功能。以深入的了解字符串内部的处理机制。本文就记录了一些前辈们留下的非常简练的实现。

代码语言:javascript
代码运行次数:0
运行
复制
#include <stdio.h>
#include <stdlib.h>
int myStrlen(const char* str);
char* myStrcpy(char* dest, const char* src);
int myStrcmp(const char* dest, const char* src);
void myStrcat(char* dest, char* src);
int main(int argc, char *argv[])
{
char buf[20];
char sz[] = “dengjia”;
int nCmp;
int nLen;
nLen = myStrlen(sz);
printf(“%d\n”, nLen);
myStrcpy(buf, sz);
printf(“%s–%s\n”, buf, sz);
nCmp = myStrcmp(buf, sz);
printf(“%d\n”, nCmp);
myStrcat(buf, sz);
printf(“%s\n”, buf);
system(“pause”);
return 0;
}
void myStrcat(char* dest, char* src)
{
// 先将被追加字符串的指针指到\0
while (*dest) dest++;
// 像strcpy一样将src追加到dest中
while (*dest++ = *src++);
}
int myStrcmp(const char* dest, const char* src)
{
// 循环条件每个字符都相等
// 并且两个字符串都没有到结尾
// 一旦以上某个条件不满足则跳出while
while (*dest == *src && *dest != ‘\0’ && *src != ‘\0’)
{
dest++; src++;
}
// 此时计算最后指向的两个字符的差值,返回对应值即可
return *dest > *src ? 1 : (*dest == *src ? 0 : -1);
}
int myStrlen(const char* str)
{
int nLen = 0;
// 遍历字符串每一个字符,直到遇到\0为止,每循环一次给nLen加1
while (*str++) nLen++;
// 返回最终结果
return nLen;
}
char* myStrcpy(char* dest, const char* src)
{
// 备份原指针
char* tmp = dest;
// 把源字符串每一个字符拷贝到目标字符串中
// 在循环条件中使用后++可减少代码行数,并且不会出问题
// 最后字符指针指向src的\0位置
while (*tmp++ = *src++);
// 返回备份的指针,这样可以重叠使用myStrcpy函数
// 例:myStrcpy(dest, myStrcpy(d,s));
return dest;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015-05-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档