C语言库函数中strlen、strcmp、strcpy、strcat是我们非常常用的一些字符串处理函数,我们不得不了解一下内部的工作原理,有必要思考如果没有这些库函数我们该如何实现这些函数的功能。以深入的了解字符串内部的处理机制。本文就记录了一些前辈们留下的非常简练的实现。
代码语言:javascript复制#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(“%dn”, nLen);
myStrcpy(buf, sz);
printf(“%s–%sn”, buf, sz);
nCmp = myStrcmp(buf, sz);
printf(“%dn”, nCmp);
myStrcat(buf, sz);
printf(“%sn”, buf);
system(“pause”);
return 0;
}
void myStrcat(char* dest, char* src)
{
// 先将被追加字符串的指针指到
while (*dest) dest ;
// 像strcpy一样将src追加到dest中
while (*dest = *src );
}
int myStrcmp(const char* dest, const char* src)
{
// 循环条件每个字符都相等
// 并且两个字符串都没有到结尾
// 一旦以上某个条件不满足则跳出while
while (*dest == *src && *dest != ‘ ’ && *src != ‘ ’)
{
dest ; src ;
}
// 此时计算最后指向的两个字符的差值,返回对应值即可
return *dest > *src ? 1 : (*dest == *src ? 0 : -1);
}
int myStrlen(const char* str)
{
int nLen = 0;
// 遍历字符串每一个字符,直到遇到 为止,每循环一次给nLen加1
while (*str ) nLen ;
// 返回最终结果
return nLen;
}
char* myStrcpy(char* dest, const char* src)
{
// 备份原指针
char* tmp = dest;
// 把源字符串每一个字符拷贝到目标字符串中
// 在循环条件中使用后 可减少代码行数,并且不会出问题
// 最后字符指针指向src的 位置
while (*tmp = *src );
// 返回备份的指针,这样可以重叠使用myStrcpy函数
// 例:myStrcpy(dest, myStrcpy(d,s));
return dest;
}