您的位置:首页 > 编程语言 > C语言/C++

C语言字符串函数的模拟实现(strlen、strcpy、strcat、strstr 、strcmp)

2017-07-26 22:01 525 查看
C语言库函数有很多,这里我针对几个字符串函数进行模拟实现:

(1)strlen     字符串求长度函数

(2)strcpy     字符串拷贝函数

(3)strcat      字符串连接函数

(4)strstr      字符串查找函数

(5)strcmp   字符串比较函数

1.strlen模拟实现(两种方法)

(1)方法一(可设置变量的方式)

#include<stdio.h>
int my_strlen(char *p)
{
int count = 0;
while (*p)
{
p++;
count++;
}
return count;
}
int main()
{
char arr[] = "asxgjs";
int ret = my_strlen(arr);
printf("%d\n", ret);
system("pause");
return 0;
}(2)方法二(不能设置变量,即使用递归实现)
#include<stdio.h>
int my_strlen(char *p)
{
if (*p == 0)
return 0;
else
return (1 + my_strlen(p + 1));
}
int main()
{
int ret = 0;
char arr[] = "asdhns";
ret = my_strlen(arr);
printf("%d\n", ret);
system("pause");
return 0;
}

运行结果:



2.strcpy模拟实现

#include<stdio.h>
#include<assert.h>
#include<stdlib.h>
char*my_strcpy(char*dest, const char*src)
{
assert(dest != NULL); //断言,保证dest不为空
assert(src != NULL);
char*start = dest;
while (*dest++ = *src++)
;
return start;
}
int main()
{
char arr[20] = "hello haha";
char*p = "world!";
char*tmp=my_strcpy(arr, p);
printf("%s\n",tmp);
system("pause");
return 0;
}

运行结果:



3.strcat模拟实现

#include<stdio.h>
#include<assert.h>
#include<stdlib.h>
char*my_strcat(char*dest, const char*src)
{
assert(dest != NULL); //断言,保证dest不为空
char *start = dest;
while (*dest)
dest++;
while (*dest++ = *src++)
;
return start;
}
int main()
{
char arr[20] = "hello ";
char*p = "world!";
char*tmp=my_strcat(arr, p);
printf("%s\n",tmp);
system("pause");
return 0;
}




4.strstr模拟实现

#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
char*my_strstr(const char*dest, const char*src)
{
assert(dest);
while (*dest)
{
while ((*dest != *src) && (*dest != 0))
dest++;
while (*dest == *src)
{
const char*pdest = dest;
const char*psrc = src;
while(*pdest == *psrc)
{
pdest++;
psrc++;
}
if (*psrc == 0)
return (char*)dest;
else
dest++;
}
}
return NULL;
}
int main()
{
char *arr = "asddhjadhhbfh";
char *p = "dhh";
char*ret=my_strstr(arr, p);
printf("%s\n", ret);
system("pause");
return 0;
}

运行结果:



5.strcmp模拟实现

#include<stdio.h>
#include<stdlib.h>
int my_strcmp(const char*buf1,const char*buf2)
{
while ((*buf1 == *buf2) && (*buf1!=0))
{
buf1++;
buf2++;
}
return (*buf1 - *buf2);
}
int main()
{
char *arr= "hsadsjfkl";
char *p = "hsahgjk";
int ret=my_strcmp(arr, p);
printf("%d\n",ret);
system("pause");
return 0;
}


运行结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: