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

原创 2016年08月30日 12:30:06

常见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;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

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

/* 熟练使用C语言中提供的代码库有助于我们在编程时极大减少工作量和一些没有必要的bug。 想成为一个优秀的程序员,必须深入理解这些库。而编写这些库就是最好的学习手段。 在平常的积累中,也可以自己扩展...

C语言标准库中常见字符串处理函数

void *memccpy (void *dest, const void *src, int c, size_t n); 从src所指向的对象复制n个字符到dest所指向的对象中。如果复制过程中遇...

C语言中常见的字符串处理函数

C语言中常见的字符串处理函数C语言中提供了大量丰富的字符串处理函数,大致可以分为字符串的输入,输出,合并,修改,比较,转换,复制,搜索几类。 用于输入输出的函数包含在stdio.h中而其他的字符串处...

常见C语言字符串函数

      额,据说,在面试的时候经常会出现要我们实现字符串函数的题目,话还说这些题目其实很简单,主要考的是面试者的代码风格和考虑问题的严谨性。偶要是没看到有些面试题目考这些字符串函数,偶估计就不会用...

第18节 C语言之字符串与常见的字符串库函数

字符串 1.C语言中的字符串     C语言中的字符串类型是用来处理文本信息数据的。它是由字母、数字、下划线组成的一串字符。我们把这样的数据类型称之为字符串或串。 2.文本数据    2....

常见的字符串操作(C语言实现)

printf()和scanf() 头文件:stdio.h 要求:加入格式控制符 %c :单个字符 %s:字符串 int main() { char string[100]; int...

常见的字符串匹配算法对比实现C语言版本

/*文件命名:match.c */ #include #include #include #include #include #define ASCII_SIZE       ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C语言常见字符串函数实现
举报原因:
原因补充:

(最多只允许输入30个字)