模拟实现strcpy函数:将一个字符串拷贝到另一个字符串里
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
char *my_strcpy(char *dest,const char *str)
{
char *ret = dest;
while (*dest++ = *str++)
{
;
}
return ret;
}
int main()
{
char *arr1 = "hello,zhaoman!";
char arr2[20];
char *ret = my_strcpy(arr2, arr1);
printf("%s", ret);
system("pause");
return 0;
}
模拟实现strcmp函数:两个字符串的比较
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<assert.h>
int my_strcmp(const char *str1, const char *str2)
{
assert(str1);
assert(str2);
int num1 = strlen(str1);
int num2 = strlen(str2);
if (num1 > num2)
{
return 1;
}
else if (num1 < num2)
{
return - 1;
}
else
{
while (*str1)
{
if (*str1>*str2)
{
return 1;
}
else if (*str1 < *str2)
{
return -1;
}
else
{
str1++;
str2++;
}
}
}
}
int main()
{
char str1[] = "gsdhy";
char str2[] = "ahaom";
int ret = my_strcmp(str1, str2);
if (ret > 0)
{
printf("str1>str2");
}
else if (ret == 0)
{
printf("str1=str2");
}
else
{
printf("str1<str2");
}
system("pause");
return 0;
}
模拟实现strcat函数:字符串拼接函数将一个字符串拼接到另一个字符串上
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<assert.h>
char *my_strcat(char *dest, const char *str)
{
assert(dest);
assert(str);
char *ret = dest;
while (*dest)
{
dest++;
}
while (*dest++ = *str++)
{
;
}
return ret;
}
int main()
{
char arr1[] = "hello ";
char arr2[] = "zhaoman";
char *ret = my_strcat(arr1, arr2);
printf("%s", ret);
system("pause");
return 0;
}
模拟实现strstr函数:判断一个字符串是不是另一个字符串的子串
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<assert.h>
char *my_strstr(const char *dest, const char *src)
{
assert(dest);
assert(src);
const char *str1 = dest;
const char *str2 = src;
const char *start = NULL;
if (*str2 == '\0')//空串是任何字符串的子串
{
return str1;
}
while (*str1)
{
start = str1;
while ((*str1)&&(*str2)&&(*str1==*str2))
{
str1++;
str2++;
}
if (*str2 == '\0')
{
return start;
}
}
str1 = start + 1;
str2 = dest;
}
int main()
{
char *arr1 = "zhao";
char *arr2 = "zhaoman";
char *ret = my_strstr(arr2, arr1);
printf("%s", ret);
system("pause");
return 0;
}
strchr:找到一个字符第一次出现的位置并返回这个下标
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<assert.h>
char *my_strchr(const char *str, int a)
{
assert(str);
assert(a);
char *ret = str;
while (*ret++)
{
if (*ret == a)
{
return ret;
}
}
return NULL;
}
int main()
{
char str[] = "hello zhaoman!";
char a = 'a';
char *ret = my_strchr(str, a);
int num = ret - str + 1;
if (ret == NULL)
{
printf("没找到!");
}
else
{
printf("%d", num);
}
system("pause");
return 0;
}
memcpy:从头开始拷贝一个字符串到另一个字符串
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<assert.h>
void *my_memcpy(void *dest, const void *src, size_t count)
{
assert(src);
assert(count);
void *ret = dest;
char *str1 = (char*)dest;
char *str2 = (const char*)src;
while (count--)
{
*str1++ = *str2++;
}
return ret;
}
int main()
{
char str1[]= "zhaoman";
char str2[]="zhmm";
char *p = my_memcpy(str1, str2, 4);
printf("%s", str1);
system("pause");
return 0;
}