strcpy的实现
void mycpy(char *s1,char *s2)
{
while(*s1++=*s2++);
}
strlen的实现
int mylen(char *s1)
{
char *p=s1;
while(*p++);
return p-s1-1;
}
strcat 的实现
void mycat(char *s1,char *s2)
{
while(*s1++);
s1–;
while(*s1++=*s2++);
}
atoi的实现
void myatoi(char *str)
{
if(*str==NULL)
return -1;
while(*str==" ")
str++;
int sign=(*str=="-")?-1:1;
int result=0;
while(*str>='0'&&str<='9')
{
result=result*10+(*str-'0');
str++;
}
while(*str==" ")
str++;
if(*str=='\0')
return -1;
return result*sign;
}
int main()
{
printf("%D\r\n",myatoi("123456"));
return 0;
}
itoa函数实现
char *myitoa(int num,char *str,int radix)
{
int sign=num;
int tmp;
int j;
if(sign<0)
{
num=-num;
}
while(num)
{
*ptr++=num%radix;
num/=radix;
if(*ptr<radix)
{
*ptr++=num+'0';
break;
}
}
if(sign<0)
{
*ptr++='-';
}
*ptr='\0';
j=ptr-str-1;
for(int i=0;i<str;i++)
{
int tmp=str[i];
str[i]=str[j];
str[j--]=tmp;
}
return str;
}
int main()
{
char str[6];
myitoa(123456,sr,10);
}
strcmp的实现
int my_strcmp(const char *str1,const char *str2)
{
assert(str1&&str2);
while(*str1==*str2)
{
if(*str='\0')
{
return 0;
}
str1++;
str2++;
}
return *str1-*str2;
}
strncpy()
char* mystrncpy(char* dest,const char* src,ssize_t count)
{
char* begin=dest;
assert(str1&&str2);
while(count&&(*dest=*src))
{
str++;
src++;
count--;
}
while(count--)
{
*dest++='\0';
}
return begin;
}
strncat
char* my_strncat(char* dest,const char* src,ssize_t count)
{
char *begin=dest;
while(*dest)
dest++;
while(count&&(*dest=*src))
{
count--;
}
if(count==0)
*dest='\0';
return begin;
}
memcpy
void* my_memcpy(void* dest, const void* src, size_t count) {
void* begin = dest;
while (count--) {
*(char*)dest = *(char*)src;
dest = (char*)dest + 1;
src = (char*)src + 1;
}
return begin;
}
memmove
void* my_memmove(void* dest, const void* src, size_t count) {
assert(dest && src);
char* begin = dest;
if (dest > src) {
//后->前
while (count--) {
*((char*)dest + count) = *((char*)src + count);
}
}
else {
//前—>后
while (count--) {
*(char*)dest = *(char*)src;
(char*)dest += 1;
(char*)src += 1;
}
}
return begin;
}
int main() {
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
//1234->3456
my_memmove(arr + 2, arr, 4 * sizeof(int));
//3456->1234
my_memmove(arr, arr + 2, 4 * sizeof(int));
for (int i = 0; i < 10; i++) {
printf("%d ", arr[i]);
}
return 0;
}
memcpy()
int my_memcmp(const void* buf1, const void* buf2, size_t count) {
assert(buf1 && buf2);
while (count-- && (*(char*)buf1 == *(char*)buf2)) {
(char*)buf1 += 1;
(char*)buf2 += 1;
}
return *(char*)buf1 - *(char*)buf2;
}
int main()
{
int arr1[] = { 1,2,3,4,5 };
int arr2[] = { 1,2,3,4,6 };
int ret = my_memcmp(arr1, arr2, 1 * sizeof(int));
printf("%d\n", ret);
return 0;
}
strstr
char* my_strstr(const char* str, const char* set) {
assert(str && set);
char* s1 = str;
char* s2 = set;
while (*s1) {
//归位
str = s1;
set = s2;
//防止s1=s1=\0
while ((*str && *set) && (*str == *set)) {
str++;
set++;
}
//判断
if (*set == '\0') {
return s1;
}
//进位
s1++;
}
return NULL;
}