关闭

C语言常见字符串函数实现

标签: c语言函数
89人阅读 评论(0) 收藏 举报
分类:

常见C语言函数实现如下:


//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;
}
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:8810次
    • 积分:229
    • 等级:
    • 排名:千里之外
    • 原创:14篇
    • 转载:5篇
    • 译文:0篇
    • 评论:0条
    文章分类