1、模拟实现strlen函数(计数器实现,两个指针相减,递归实现)
//模拟实现strlen
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>
//方法一:计数器实现
int my_strlen1(const char * str)
{
int len = 0;
assert(NULL != str);
while (*str++ != '\0')
{
len++;
}
return len;
}
//方法二:两个指针相减
int my_strlen2(const char * str)
{
const char *strbak = NULL;
assert(NULL != str);
strbak = str;
while (*str++ != '\0')
{
NULL;
} //while循环后str指向\0后面的那个字符。
return(str-1-strbak);
}
//方法三用递归实现。
int my_strlen3(const char * str)
{
assert(NULL != str);
if ('\0' == *str )
{
return 0;
}
else
return (1+my_strlen3(str+1));
}
int main()
{
char array[20] = "abcdef";
printf("len = %d\n",my_strlen1(array));
printf("len = %d\n",my_strlen2(array));
printf("len = %d\n",my_strlen3(array));
printf("hello...\n");
system("pause");
return 0;
}
2、模拟实现strcpy函数
//模拟实现strcpy函数
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>
char *mystrcpy(char *dest, const char *src)
{
char *destbak = NULL;
assert(NULL != dest && NULL != src);
/*while ('\0' != *src)
{
*dest++ = *src++;
}
*dest = '\0';*/ //可以简化成下面的形式
while ((*dest++ = *src++) )
{
NULL;
}
return destbak;
}
int main()
{
char array[100] = { 0 };
char *p = "abcdef";
mystrcpy(array, p);
printf("array = %s\n",array);
printf("hello...\n");
system("pause");
return 0;
}
3、模拟实现strcat函数
//模拟实现strcat函数
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>
char * mystrcat(char *dest, const char *src)
{
char *destbak = dest;
assert(NULL != dest && NULL != src);
while ( '\0' != *dest)
{
dest++;
}
while (*dest++ = *src++)
{
NULL;
}
return destbak;
}
int main()
{
char array[100] = "hello world";
char *p = "abcdef";
mystrcat(array, p);
printf("array = %s\n",array);
printf("hello...\n");
system("pause");
return 0;
}
4、模拟实现strcmp函数(两种方法)
//模拟实现strcmp
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>
//方法一
int mystrcmp1(const char *str1, const char *str2)
{
assert(NULL != str1 && NULL != str2);
while ( '\0' != *str1 || '\0' != *str2 )
{
if (*str1 > *str2)
{
return 1;
}
if (*str1 < *str2)
{
return -1;
}
str1++;
str2++;
}
if ('\0' == *str1 && '\0' == *str2)
{
return 0;
}
}
//方法二
int mystrcmp2(const char *str1, const char *str2)
{
assert(NULL != str1 && NULL != str2);
while (*str1 == *str2)
{
if ('\0' == *str1)
{
return 0;
}
str1++;
str2++;
}
if (*str1 > *str2)
{
return 1;
}
else
return -1;
}
int main()
{
char *p = "abjdidfe";
char *p2 = "dfjie";
int ret = 0;
ret = mystrcmp1(p,p2);
if (0 == ret)
{
printf("p1 = p2\n");
}
else if(ret > 0)
printf("p1 > p2\n");
else
printf("p1 < p2\n");
ret = mystrcmp2(p,p2);
if (0 == ret)
{
printf("p1 = p2\n");
}
else if(ret > 0)
printf("p1 > p2\n");
else
printf("p1 < p2\n");
printf("hello...\n");
system("pause");
return 0;
}