#define _CRT_SECURE_NO_WARNINGS
strlen 的三种实现方法
#include<stdio.h>
#include<assert.h>
int my_strlen(const char *str1) //递归
{
if(*str1 == '\0')
return 0;
else
return 1+my_strlen(str1+1);
}
int my_strlen(const char *str1) //首尾指针相减
{
assert(str1);
const char *end = str1;
while(*end++)
{
;
}
return end-str1-1;
}
int my_strlen(const char*str1) //采用一个计数器
{
assert(str1);
int count = 0;
while(*str1)
{
count ++;
str1++;
}
return count;
}
int main()
{
char arr[] = "abcdefg";
int ret = 0;
ret = my_strlen(arr);
printf("%d\n",ret);
return 0;
}
//strstr 的实现
#include<stdio.h>
char *my_strstr(const char* dest,const char* src) //查找字符串
{
char *cp = (char *)dest;
char *s1;
char *s2 = (char *)src;
if(!*src)
return cp;
while(*cp)
{
s1 = cp;
while(*s1 && *s2 && *s1++==*s2++)
{
;
}
if(*s2=='\0')
return cp;
cp++;
}
return NULL;
}
int main()
{
char arr[] = "abcdfef";
printf("%s\n",my_strstr(arr,"cdf"));
return 0;
}
#include<stdio.h>
#include<assert.h>
char *my_strcpy(char *start,const char *end) //字符串的·拷贝
{
char *p = start;
assert(start);
assert(end);
while(*start++=*end++)
{
;
}
return p;
}
int main()
{
char arr[20];
printf("%s\n",my_strcpy(arr,"fbjjhhj"));
return 0;
}
#include<stdio.h>
char *my_strncpy(char *arr,const char*str,int sz) //字符串的拷贝,可以控制拷贝的长度
{
char *p = arr;
while(sz&&(*arr++=*str++))
{
sz--;
}
if(sz)
{
while(--sz)
{
*arr++='\0';
}
}
return p;
}
int main()
{
char arr[20];
printf("%s\n",my_strncpy(arr,"abcefg",5));
return 0;
}
#include<stdio.h>
char *my_strcat(char *str1,const char *str2) //字符串的链接
{
char *p = str1;
while(*str1)
str1++;
while(*str1++=*str2++)
;
return p;
}
int main()
{
char arr[20] = "acdvg";
printf("%s\n",my_strcat(arr,"sdferg"));
return 0;
}
#include<stdio.h>
char *my_strncat(char *dst,const char* src,size_t sz)
{
char *p = dst;
while(*p)
p++;
while(sz--)
{
if(!(*p++ = *src++))
return dst;
}
*p = '\0';
return dst;
}
int main()
{
char arr[20] = "abchd";
printf("%s\n",my_strncat(arr,"ghdhgui",4));
return 0;
}
#include <stdio.h>
#include <assert.h>
int my_strcmp(const char* dst,const char *src) //字符串的比较,从头开始,知道遇到不相同的比较器ASSIC码值,
{
assert(dst);
assert(src);
while(*dst==*src&&*src&&*dst)
{
dst++;
src++;
}
return (int)(*dst-*src);
}
int main()
{
char arr[] = "adcdf";
printf("%d\n",my_strcmp(arr,"adcdf"));
return 0;
}
#include<stdio.h>
int my_strncmp(const char *dst,const char *src,size_t sz)
{
while(sz&&*dst==*src&&*src&&*dst)
{
src++;
dst++;
sz--;
}
return (int)(*dst-*src);
}
int main()
{
char arr[] = "abcdefg";
printf("%d",my_strncmp(arr,"bcdff",4));
return 0;
}
#include<stdio.h>
#include<assert.h>
void *my_memcpy(void *dest,const void *src,size_t sz) // 其功能是从源 src 所指的 内存地址 的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位 //置中
{
void *p = dest;
assert(dest);
assert(src);
while(sz)
{
*(char *)dest = *(char *)src;
dest = (char *)dest+1;
src = (char *)src+1;
sz--;
}
return p;
}
int main()
{
int arr[20] = {0};
int i = 0;
int str[] = {1,2,3,4,5,6,7,8,8,9};
int sz = sizeof(str)/sizeof(str[0]);
my_memcpy(arr,str,sizeof(str));
for(i=0; i<sz; i++)
printf("%d",arr[i]);
}
strlen 的三种实现方法
#include<stdio.h>
#include<assert.h>
int my_strlen(const char *str1) //递归
{
if(*str1 == '\0')
return 0;
else
return 1+my_strlen(str1+1);
}
int my_strlen(const char *str1) //首尾指针相减
{
assert(str1);
const char *end = str1;
while(*end++)
{
;
}
return end-str1-1;
}
int my_strlen(const char*str1) //采用一个计数器
{
assert(str1);
int count = 0;
while(*str1)
{
count ++;
str1++;
}
return count;
}
int main()
{
char arr[] = "abcdefg";
int ret = 0;
ret = my_strlen(arr);
printf("%d\n",ret);
return 0;
}
//strstr 的实现
#include<stdio.h>
char *my_strstr(const char* dest,const char* src) //查找字符串
{
char *cp = (char *)dest;
char *s1;
char *s2 = (char *)src;
if(!*src)
return cp;
while(*cp)
{
s1 = cp;
while(*s1 && *s2 && *s1++==*s2++)
{
;
}
if(*s2=='\0')
return cp;
cp++;
}
return NULL;
}
int main()
{
char arr[] = "abcdfef";
printf("%s\n",my_strstr(arr,"cdf"));
return 0;
}
#include<stdio.h>
#include<assert.h>
char *my_strcpy(char *start,const char *end) //字符串的·拷贝
{
char *p = start;
assert(start);
assert(end);
while(*start++=*end++)
{
;
}
return p;
}
int main()
{
char arr[20];
printf("%s\n",my_strcpy(arr,"fbjjhhj"));
return 0;
}
#include<stdio.h>
char *my_strncpy(char *arr,const char*str,int sz) //字符串的拷贝,可以控制拷贝的长度
{
char *p = arr;
while(sz&&(*arr++=*str++))
{
sz--;
}
if(sz)
{
while(--sz)
{
*arr++='\0';
}
}
return p;
}
int main()
{
char arr[20];
printf("%s\n",my_strncpy(arr,"abcefg",5));
return 0;
}
#include<stdio.h>
char *my_strcat(char *str1,const char *str2) //字符串的链接
{
char *p = str1;
while(*str1)
str1++;
while(*str1++=*str2++)
;
return p;
}
int main()
{
char arr[20] = "acdvg";
printf("%s\n",my_strcat(arr,"sdferg"));
return 0;
}
#include<stdio.h>
char *my_strncat(char *dst,const char* src,size_t sz)
{
char *p = dst;
while(*p)
p++;
while(sz--)
{
if(!(*p++ = *src++))
return dst;
}
*p = '\0';
return dst;
}
int main()
{
char arr[20] = "abchd";
printf("%s\n",my_strncat(arr,"ghdhgui",4));
return 0;
}
#include <stdio.h>
#include <assert.h>
int my_strcmp(const char* dst,const char *src) //字符串的比较,从头开始,知道遇到不相同的比较器ASSIC码值,
{
assert(dst);
assert(src);
while(*dst==*src&&*src&&*dst)
{
dst++;
src++;
}
return (int)(*dst-*src);
}
int main()
{
char arr[] = "adcdf";
printf("%d\n",my_strcmp(arr,"adcdf"));
return 0;
}
#include<stdio.h>
int my_strncmp(const char *dst,const char *src,size_t sz)
{
while(sz&&*dst==*src&&*src&&*dst)
{
src++;
dst++;
sz--;
}
return (int)(*dst-*src);
}
int main()
{
char arr[] = "abcdefg";
printf("%d",my_strncmp(arr,"bcdff",4));
return 0;
}
#include<stdio.h>
#include<assert.h>
void *my_memcpy(void *dest,const void *src,size_t sz) // 其功能是从源 src 所指的 内存地址 的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位 //置中
{
void *p = dest;
assert(dest);
assert(src);
while(sz)
{
*(char *)dest = *(char *)src;
dest = (char *)dest+1;
src = (char *)src+1;
sz--;
}
return p;
}
int main()
{
int arr[20] = {0};
int i = 0;
int str[] = {1,2,3,4,5,6,7,8,8,9};
int sz = sizeof(str)/sizeof(str[0]);
my_memcpy(arr,str,sizeof(str));
for(i=0; i<sz; i++)
printf("%d",arr[i]);
}