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;
}
运行结果:
(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;
}
运行结果:
相关文章推荐
- 模拟实现strstr,strcpy,strlen,strcat,strcmp,memcpy,memmove
- 模拟实现strstr,strcpy,strlen,strcat,strcmp,memcpy,memmove
- 字符串处理函数的模拟实现(strlen、strstr、strcat、strcmp、strcpy、memmove、memcpy)
- 和字符串有关的函数的模拟实现 strlen strcpy strcat strstr strcmp
- 模拟实现字符串操作函数(strcpy,strstr,strcat,strcmp,strlen)与内存操作函数(memcpy,memmove)
- 模拟实现strlen,strcpy,strcat,strstr,strcmp,memcpy,memmove
- 模拟实现: strstr strcpy strlen strcat strcmp memcpy memmove
- 模拟实现: strstr strcpy strlen strcat strcmp memcpy memmove
- C语言模拟实现strcpy、strncpy、strcmp、strcat、strstr
- [C语言]strcat strstr strcpy strcmp strlen 的实现与使用
- [C语言]模拟实现strcpy/strncpy/strcat/strncat/strcmp/strncmp/strstr
- C语言模拟实现strcpy、strlen、strcmp、strcat
- 模拟实现strcpy,strcmp,strcat,strstr.strlen
- 模拟实现strcmp,strncmp,strstr,strcat,strncat,strcpy,strncpy,strlen ,memcpy,memmove等函数
- C语言中的字符串函数的实现,strcpy,strlen,strcat,strcmp
- strlen,strcpy,strcat,strcmp,strstr,memcpy,的模拟实现方式
- C语言_编写说明strlen、strcpy、strcat、strcmp如何实现的
- c语言:strcpy、strncpy、 Strcat、 Strcmp 、strchr、 strstr、 Strlen等函数功能
- strcpy,strcmp,strstr,strcat,memcpy,memmove,memset的模拟实现
- C语言中strlen、strcpy、strncpy、strcat、strnact、strcmp、memcpy函数的实现