字符串操作函数的实现方法(代码)

来源:互联网 发布:淘宝退货会影响权重吗 编辑:程序博客网 时间:2024/06/06 00:00

说明

字符串操作函数在C语言中的使用是相当多的,也难怪标准库函数有定义实现,也是一个很明智的选择,帮助我们简化了对字符串的操作。
其实我们也可以尝试写一下这些常用函数的具体实现方法,也可以帮助我们对这些函数有更深的理解,之后使用时也会更加自如。


查看函数的使用手册

要实现一个函数,当然先需要知道它的作用是什么,相信大多数人都会摆渡,基本也都能解决问题。Linux环境下,其实我们可以用man命令查看函数的使用说明,有很详细的讲解,包括函数的声明、使用描述、返回值等,只不过是英文的,但是可以尝试查看,相信以后会有帮助。
具体的使用我就不写了,直接写实现代码,不一定十分严密,也应该不是最简洁高效的,但基本没大问题,经供参考。

注意:
1、函数开头的输入错误的判断我写的不严密,不要照着使用。我觉得有些可以打印提示后,直接用assert退出。
2、个人觉得大多数都是不难的,最难的可能就是strtok函数了,一定要先理解它的使用方法。


字符串操作函数

1、strlen

#define ERR_INPUT -2int strlen(const char *str){    if(!str)    {        printf("INPUT ERROR!\n");        return ERR_INPUT;                  }    int len = 0;    while(str[len] != '\0')    {        len++;    }    return len;}

2、strcat

char *strcat(char *dest, const char *src){    if(!dest || !src)    {        printf("INPUT ERROR!\n");        return NULL;                  }    int len = strlen(dest);    int i = 0;    while(src[i] != '\0')    {        dest[len + i] = src[i];        i++;    }    dest[len + i] = '\0';    return dest;}

3、strcmp

int strcmp(const char *str1, const char *str2){    if(!str1 || !str2)    {        printf("INPUT ERROR!\n");        return -2;                  }    int len = strlen(str1);    int len2 = strlen(str2);    if(len2 < len)        len = len2;    int i = 0;    int check = 0;    for(i = 0; i <= len; i++)    {        if(str1[i] > str2[i])        {            check = 1;            break;        }        else if(str1[i] < str2[i])        {            check = -1;            break;        }    }    return check;}

4、strncmp

int strncmp(const char *str1, const char *str2, int n){    if(!str1 || !str2 || n < 1)    {        printf("INPUT ERROR!\n");        return -2;                  }    int i = 0;    int check = 0;    for(i = 0; i < n; i++)    {        if(str1[i] > str2[i])        {            check = 1;            break;        }        else if(str1[i] < str2[2])        {            check = -1;            break;        }    }    return check;}

5、strcasecmp

int strcasecmp(const char *str1, const char *str2){    if(!str1 || !str2)    {        printf("INPUT ERROR!\n");        return -2;                  }    char p1, p2;    int len = strlen(str1);    int len2 = strlen(str2);    if(len2 < len)        len = len2;    int i = 0;    int check = 0;    for(i = 0; i <= len; i++)    {        p1 = str1[i];        p2 = str2[i];        if(str1[i] >= 'A' && str1[i] <= 'Z')            p1 = str1[i] + 32;        if(str2[i] >= 'A' && str2[i] <= 'Z')            p2 = str2[i] + 32;        if(p1 > p2)        {            check = 1;            break;        }        else if(p1 < p2)        {            check = -1;            break;        }    }    return check;}

6、strchr

char *strchr(const char *str, int n){    if(!str || n < 0 || n > 127)    {        printf("INPUT ERROR!\n");        return NULL;                  }    char *p = NULL;    int i = 0;    while(str[i] != '\0')    {        if(str[i] == n)        {            p = (char *)str + i;            break;        }        i++;    }    return p;}

7、strtok

char *strtok(char *str, const char *s){    if(!str || !s)    {        printf("INPUT ERROR!\n");        return NULL;                  }    static char *last = NULL;    static int p = 0;    static int a[100] = {0};    if(str == NULL && last == NULL)        return ;    if(last != NULL)    {        p++;        last = last + a[p] - a[p - 1];        return (last + 1);    }    int lenstr = strlen(str);    int lens = strlen(s);    int m = 0;    int n = 0;    int i = 0;    for(m = 0; m < lenstr; m++)    {        for(n = 0; n < lens; n++)        {            if(str[m] == s[n])            {                str[m] = '\0';                a[i] = m;                i++;                m++;                break;            }        }    }    last = str;    return last;}

8、strcpy

char *strcpy(char *dest, const char *src){    if(!dest || !src)    {        printf("INPUT ERROR!\n");        return NULL;                  }    int i = 0;    while(src[i] != '\0')    {        dest[i] = src[i];        i++;    }    dest[i] = '\0';    return dest;}

9、strncpy

char *strncpy(char *dest, const char *src, int n){    if(!dest || !src || n < 1)    {        printf("INPUT ERROR!\n");        return NULL;               }    int i = 0;    while(src[i] != '\0' && i < n)    {        dest[i] = src[i];        i++;    }    while(i < n)    {        dest[i] = '\0';        i++;    }    return dest;}

10、strstr

char *strstr(const char *haystack, const char *needle){    if(!haystack || !needle)    {        printf("INPUT ERROR!\n");        return NULL;            }    int len1 = strlen(haystack);    int len2 = strlen(needle);    int len = len1 - len2 + 1;    int i = 0;    int t = 0;    char *p = NULL;    int flag = 1;    for(i = 0; i < len; i++)    {        flag = 1;        for(t = i; t < len2 + i; t++)        {            if(haystack[t] != needle[t - i])            {                flag = 0;                break;            }        }        if(flag)        {            p = (char *)haystack + i;            break;        }    }    return p;}

0 0
原创粉丝点击