1. 模拟实现strlen
#include<stdio.h>
int my_strlen(const char * str)
{
int count = 0;
while (*str)
{
count++;
str++;
}
return count;
}
int my_strlen(const char * str)
{
if(*str == '\0')
return 0;
else
return 1+my_strlen(str+1);
}
int my_strlen(char *s)
{
char *p = s;
while(*p != ‘\0’ )
p++;
return p-s;
}
2. 模拟实现strcpy
#include<stdio.h>
#include<assert.h>
#include<Windows.h>
void Print(char *arr, int num)
{
int i = 0;
for (i = 0; i < num; i++){
printf("%c", arr[i]);
}
printf("\n");
}
char My_strcpy(const char *src, char *dst)
{
assert(src);
assert(dst);
while (*dst = *src){
dst++;
src++;
}
return *dst;
}
int main()
{
const char* src = "hello world!";
char dst[16];
My_strcpy(src, dst);
Print(dst, strlen(dst));
system("pause");
return 0;
}
3. 模拟实现strcat
#include<stdio.h>
#include<assert.h>
#include<Windows.h>
char *my_strcat(char *src,const char *dst)
{
assert(src);
assert(dst);
char *start = src;
while (*start){
start++;
}
while (*start = *dst){
start++;
dst++;
}
return src;
}
int main()
{
char src[32] = "please say";
my_strcat(src, " hello");
printf("%s\n", src);
system("pause");
return 0;
}
4. 模拟实现strstr
#include<stdio.h>
#include<assert.h>
#include<Windows.h>
const char *my_strstr(const char*str, const char *sub_str)
{
assert(str);
assert(sub_str);
while (*str){
const char *p = str;
const char *q = sub_str;
while (*p && *q && *p == *q){
p++;
q++;
}
if (*q=='\0'){
return str;
}
str++;
}
return NULL;
}
int main()
{
const char *str = "abc 123 abcd 1234 abcdef";
const char *sub_str = "1234";
puts(my_strstr(str, sub_str));
system("pause");
return 0;
}
5. 模拟实现strcmp
#include<stdio.h>
#include<assert.h>
#include<Windows.h>
void Print(char *arr, int num)
{
int i = 0;
for (i = 0; i < num; i++){
printf("%c", arr[i]);
}
printf("\n");
}
int My_Strcmp(const char *src, const char *dst)
{
assert(src);
assert(dst);
int tmp = 0;
while (!(tmp = *(unsigned char *)src - *(unsigned char *)dst) && dst)
{
++src;
++dst;
}
if (tmp < 0){
tmp = -1;
}
else if (tmp>0){
tmp = 1;
}
return (tmp);
}
int main()
{
const char* src = "hello world!";
const char* dst = "hello,world!";
int res=My_Strcmp(src, dst);
if (res == 0){
printf("same\n");
}
else{
printf("different\n");
}
system("pause");
return 0;
}
6. 模拟实现memcpy
#include<stdio.h>
#include<assert.h>
#include<Windows.h>
void Print(int *arr, int num)
{
int i = 0;
for (i = 0; i < num; i++){
printf("%d\n", arr[i]);
}
printf("\n");
}
void *my_memcpy(void *dst, const void *src, int num)
{
assert(src);
assert(dst);
char *_dst = dst;
const char *_src = (const char *)src;
while (num){
*_dst = *_src;
_dst++;
_src++;
num--;
}
return dst;
}
int main()
{
int a[] = { 1, 2, 3, 4, 5 };
int b[10] = { 0 };
my_memcpy(b, a, sizeof(a));
Print(b, 5);
system("pause");
return 0;
}
7. 模拟实现memmove
#include<stdio.h>
#include<assert.h>
#include<Windows.h>
void Print(char *arr, int num)
{
int i = 0;
for (i = 0; i < num; i++){
printf("%c", arr[i]);
}
printf("\n");
}
void *my_memmove(void *dst, const void *src, int num)
{
assert(src);
assert(dst);
char *_dst = dst;
const char *_src = (const char *)src;
if (_dst > _src && _dst < _src + num){
_dst = _dst + num - 1;
_src = _src + num - 1;
while (num){
*_dst = *_src;
_dst--;
_src--;
num--;
}
}
while (num){
*_dst = *_src;
_dst++;
_src++;
num--;
}
return dst;
}
int main()
{
char buf[16] = "abcd1234";
char *res1 = my_memmove(buf + 1, buf, strlen(buf) + 1);
char *res2 = my_memmove(buf, buf + 1, strlen(buf) + 1);
Print(res1, strlen(res1));
Print(res2, strlen(res2));
system("pause");
return 0;
}
|