c语言实现常见字符串函数strchr strstr strcmp atoi itoi(字符串换成整数)

好久没有更新博客了,刚刚出炉练练手的程序如下,很简单,没有考虑过多复杂的东西,有好的想法,欢迎指教:

字符查找函数:

char *my_strchr(const char *s,int c)
{
    char *pTemp = s;

    do
    {
        if(*pTemp == c)
        {
            return pTemp;
        }
    }
    while(*pTemp++);

    return NULL;
}

字符串比较函数:

int my_strcmp(const char *s1,const char *s2)
{
    char *pTemp1 = s1;
    char *pTemp2 = s2;


    while(*pTemp1 && *pTemp2 && ((*pTemp1++) == (*pTemp2++)));
    //{
        /*return ((*--pTemp1) - (*--pTemp2));*/
    //}//

    if(*pTemp1 && *pTemp2)
    {
        return ((*--pTemp1) - (*--pTemp2));
    }
    

    if(*pTemp1)
    {
        return *pTemp1;
    }

    if(*pTemp2)
    {
        return -*pTemp2;
    }

    return 0;


}

字符串查找函数:

char *my_strstr(const char *haystack,const char * needle)
{
    char *pTempSrc = haystack;

    char *pTempDes = needle;


    do
    {
        if(*pTempSrc != *pTempDes++)
        {
            pTempDes = needle;
        }

        if(!*pTempDes)
        {
            return pTempSrc-(pTempDes-needle)+1;
        }
    }while(*pTempSrc++);

    return NULL;


}

内存比较函数:

int my_memcmp(const void *s1,const void *s2,size_t n)
{
    char *pTemp1 = s1;
    char *pTemp2 = s2;

    while(n-- > 0)
    {
        if(*pTemp1++ != *pTemp2++)
        {
            break;
        }
    }

    if(*pTemp1 && *pTemp2)
    {
        return ((*--pTemp1) - (*--pTemp2));
    }
    

    if(*pTemp1)
    {
        return *pTemp1;
    }

    if(*pTemp2)
    {
        return -*pTemp2;
    }

    return 0;

}

字符串变成数字函数:

int my_atoi(const char *nptr)
{
    char *pTemp = nptr;

    int sum = 0;
    unsigned flag = 0;
    
    if(*pTemp == '-')
    {
        flag = 1;
        pTemp++;
    }
    
    do
    {
        if((*pTemp >= '0') && (*pTemp <= '9'))
        {
            sum *= 10;
            sum += (*pTemp - '0');
        }
        else
        {
            return -1;
        }

    }while(*++pTemp);

    return (flag == 0 ? sum : -sum);

}

数字变成字符串函数:

int my_itoa(int val,char *ret)
{
    char *pTemp = ret;
    int bits = 0;

    int flag = 0;
    
    if(val < 0)
    {
        flag = 1;
        val = 0-val;

        pTemp++;
        ret[0] = '-';
    }
    //printf("val  %d\n",val);
    
    while(val)
    {
        (*pTemp++) = val%10 + '0';
        bits++;
        //printf("%d   \n",val);
        val = val / 10;

    }

    *pTemp = '\0';
    
    //printf("%s    \n",ret);

    //fan zhuan
    int i = 0;
    int temp = 0;
    for( i = 0; i < bits/2; i++)
    {
        temp = ret[i+1];
        ret[i+1] = ret[bits-i-1-1];
        ret[bits-i-1-1] = temp;
    }

    return 1;


}

 

上传完毕,欢迎园友指正,谢谢!

 

 

 

 

 

 

posted on 2014-04-02 19:24  净坛使者  阅读(1070)  评论(0编辑  收藏  举报

导航