常见C语言函数实现如下:
更多关于C语言学习教程请进码神营地官网:www.icodegod.com
//atoi函数
int Myatoi(const char *str)
{
for(i = 0;isspace(str[i]);i++);
sign=(str[i]=='-')?-1:1;
if(str[i] == '+' || str[i] == '-')
i++;
for(j = 0;isdigit(str[i]);i++)
j = j*10+(str[i]-'0');
return sign*j;
}
//itoa函数
void Myitoa(int a,char *str)
{
int i,j,sign;
if((sign = a) >0)
{
a = -a;
}
for(i = 0;(a/=10)>0;i++)
{
str[i++] = a%10+'0';
}
if(0 > sign)
{
str[i++] = '-';
}
str[i] = '\0';
for(j = i-1;j>=0;j--)
{
printf("%c",str[j]);
}
}
//strcpy函数
char * Mystrcpy(char *str1,const char *str2)
{
char *temp = str1;
assert((str1 != NULL) && (str2 != NULL));
while((*str1++ = *str2++) != '\0');
return temp;
}
//strncpy函数
char * Mystrncpy(char *str1,const char* str2,int n)
{
char * temp = str1;
assert((str1 != NULL) &&(str2 !=NULL));
while(n--)
{
if(*str2 != '/0')
{
*temp++ = *str2++;
}
else
{
*temp++ = '/0';
}
}
return temp;
}
//strlen函数
int Mystrlen(const char *str)
{
int count = 0;
assert(str != NULL);
while(*str++ != '\0')
{
count++;
}
return count;
}
//strcmp函数
int Mystrcmp(const char *str1,const char *str2)
{
assert(str1 != NULL && str2 != NULL);
while(*str1&&*str2 && *str1 == *str2)
{
++str1;
++str2;
}
return *str1-*str2;
}
//strncmp函数
int Mystrncmp(const char*str1,const char*str2,int count)
{
assert((str1 != NULL)&&(str2 != NULL));
while(*str1 &&*str2 && *str1 ==*str2 && count--)
{
++str1;
++str2;
}
return *str1-*str2;
}
//stricmp不区分大小写
int Mystricmp(const char *str1,const char*str2)
{
int ch1,ch2;
assert((str1 != NULL)&&(str2!= NULL ));
while(*str1 && *str2)
{
if((ch1 = (int)*str1)>='A' && ('Z'>= ch1 ))
{
ch1 +=0x20;
}
if((ch2 = (int)*str2) >='A' && ('Z' >= ch2))
{
ch2 +=0x20;
}
if(ch1 ==ch2)
{
ch1++;
ch2++;
}
else break;
}
return (ch1-ch2);
}
//strchr函数,查找某个字符首次出现的位置
char *Mystrchr(char *str,int c)
{
assert(str != NULL);
for(;*str != c;str++)
{
if(*str == '\0')
return NULL;
}
return str;
}
//strcat函数
char * Mystrcat(char *str1,const char *str2)
{
char *temp = str1;
assert((str1 != NULL) &&(str2 != NULL));
while(*temp != '\0')
{
++temp;
}
while((*temp++ = *str2++ )!= '\0');
return temp;
}
//strncat函数
char *Mystrncat(char *str1,const char* str2,unsigned int count)
{
char *temp = str1;
assert((str1 != NULL)&& (str2 !=NULL));
while(*temp != '\0')
{
++temp;
}
while(count -- && *str2 != '\0')
{
*temp++ = *str2++;
}
*temp = '\0';
return temp;
}
//strstr函数,查找字符串第一次出现的位置
char *Mystrstr(const char *str1,const char *str2)
{
const char *str = str1;
const char *sub = str2;
assert((str1 != NULL)&&(str2 != NULL));
for(;*str1 !='\0';++str1)
{
for(str = str1,sub=str2;*sub != '\0' && *str == *sub;++str,++sub);
if(*sub == '\0')
{
return (char *)str1;
}
}
return NULL;
}
//memset
void *Mymemset(void *buff,int c,size_t count)
{
char * ptemp = (char *)buff;
assert(buff != NULL);
while(count--)
{
*ptemp++ = (char)c;
}
return buff;
}
//memcpy
void * Mymemcpy(void *buff1,const void *buff2,size_t count)
{
char *str1 = (char *)buff1;
char * str2 = (char*)buff2;
assert((buff1 != NULL)&&(buff2 != NULL));
assert(str2 >str1 || str1>str2+count-1);
while(count -- )
{
*str1++ = *str2++;
}
return buff1;
}
//memmove
void * Mymemmove(void *buff1,const void *buff2,size_t count)
{
char *str1 = (char*)buff1;
char *str2 = (char*)buff2;
assert((buff1!= NULL)&& (buff2!= NULL));
if(str2 > str1 || str1 > str2+count-1)
{
while(count--)
{
*str1++ = *str2++;
}
}
else
{
str1 = str1+count-1;
str2 = str2+count-1;
while(count--)
{
*str1--=*str2--;
}
}
return buff1;
}
下面是测试代码:
int main()
{
char str1[100] = "hello";
char str2[] = "world";
char str3[] = "ello";
char str4[] = "HDK";
int temp = 13432;
char array[]="-12314";
//printf("%d\n",Myatoi(array));
//Myitoa(temp,array);
//Mystrcpy(str2,str1);
//printf("%s\n",str2);
//Mystrncpy(str2,str1,2);
//printf("%s\n",str2);
//Mymemcpy(str2,str1,4);
//printf("%s\n",str2);
//Mymemset(str1,'c',sizeof(str1)/sizeof(char)-1);
//printf("%s\n",str1);
//Mystrcat(str1,str2);
//Mystrncat(str1,str2,3);
//printf("%s\n",Mystrchr(str1,'l'));
//printf("%d\n",Mystrlen(str1));
//printf("%d\n",Mystrcmp(str1,str2));
//printf("%d\n",Mystrncmp(str1,str3,3));
//printf("%s\n",Mystrstr(str1,str3));
printf("%d\n",Mystricmp(str1,str4));
return 0;
}