• 常用string函数分析


    string函数分析
    string函数包含在string.c文件中,经常被C文件使用。
    1. strcpy
    函数原型: char* strcpy(char* str1,char* str2);
    函数功能: 把str2指向的字符串拷贝到str1中去
    函数返回: 返回str1,即指向str1的指针
    /**
    * strcpy - Copy a %NUL terminated string
    * @dest: Where to copy the string to
    * @src: Where to copy the string from
    */
    char * strcpy(char *dest, const char *src)
    {
    char *tmp = dest;

    while((*dest++ = *src++) != ‘’);

    return tmp;
    }
    2. strncpy
    /**
    * strncpy - Copy a length-limited, %NUL-terminated string
    * @dest: Where to copy the string to
    * @src: Where to copy the string from
    * @count: The maximum number of bytes to copy
    *
    * Note that unlike userspace strncpy, this does not %NUL-pad the buffer.
    * However, the result is not %NUL-terminated if the source exceeds
    * @count bytes.
    */
    char * strncpy(char * dest,const char *src,size_t count)
    {
    char *tmp = dest;

    while (count-- && (*dest++ = *src++) != '')
    /* nothing */;

    return tmp;
    }
    3. strcat
    函数原型: char* strcat(char * str1,char * str2);
    函数功能: 把字符串str2接到str1后面,str1最后的''被取消
    函数返回: str1
    /**
    * strcat - Append one %NUL-terminated string to another
    * @dest: The string to be appended to
    * @src: The string to append to it
    */
    char * strcat(char * dest, const char * src)
    {
    char *tmp = dest;

    while (*dest)
    dest++;
    while ((*dest++ = *src++) != '')
    ;

    return tmp;
    }
    4. strncat
    /**
    * strncat - Append a length-limited, %NUL-terminated string to another
    * @dest: The string to be appended to
    * @src: The string to append to it
    * @count: The maximum numbers of bytes to copy
    *
    * Note that in contrast to strncpy, strncat ensures the result is
    * terminated.
    */
    char * strncat(char *dest, const char *src, size_t count)
    {
    char *tmp = dest;

    if (count) {
    while (*dest)
    dest++;
    while ((*dest++ = *src++)) {
    if (--count == 0) {
    *dest = '';
    break;
    }
    }
    }

    return tmp;
    }
    5. strcmp
    匹配返回0,不匹配返回非0。
    函数原型: int strcmp(char * str1,char * str2);
    函数功能: 比较两个字符串str1,str2.
    函数返回: str1<str2,返回负数; str1=str2,返回 0; str1>str2,返回正数.
    /**
    * strcmp - Compare two strings
    * @cs: One string
    * @ct: Another string
    */
    int strcmp(const char * cs,const char * ct)
    {
    register signed char __res;

    while (1) {
    if ((__res = *cs - *ct++) != 0 || !*cs++)
    break;
    }

    return __res;
    }
    6. strncmp
    匹配返回0,不匹配返回非0。
    /**
    * strncmp - Compare two length-limited strings
    * @cs: One string
    * @ct: Another string
    * @count: The maximum number of bytes to compare
    */
    int strncmp(const char * cs,const char * ct,size_t count)
    {
    register signed char __res = 0;

    while (count) {
    if ((__res = *cs - *ct++) != 0 || !*cs++)
    break;
    count--;
    }

    return __res;
    }
    7. strchr
    函数原型: char* strchr(char* str,char ch);
    函数功能: 找出str指向的字符串中第一次出现字符ch的位置
    函数返回: 返回指向该位置的指针,如找不到,则返回空指针
    参数说明: str-待搜索的字符串,ch-查找的字符
    /**
    * strchr - Find the first occurrence of a character in a string
    * @s: The string to be searched
    * @c: The character to search for
    */
    char * strchr(const char * s, int c)
    {
    for(; *s != (char) c; ++s)
    if (*s == '')
    return NULL;
    return (char *) s;
    }
    8. strrchr
    /**
    * strrchr - Find the last occurrence of a character in a string
    * @s: The string to be searched
    * @c: The character to search for
    */
    char * strrchr(const char * s, int c)
    {
    const char *p = s + strlen(s);
    do {
    if (*p == (char)c)
    return (char *)p;
    } while (--p >= s);
    return NULL;
    }

    可用于去除目录文件的目录

    #include <stdio.h>
    #include <string.h>
    
    #define DIR_FILE    "/tmp/xxx/test"
    int main()
    {
        char *file;
    
        if(strrchr(DIR_FILE, '/'))
            file = strrchr(DIR_FILE, '/') + 1;
        
        printf("dir_file-> file [%s]
    ", file);
    
        if(strrchr(file, '/'))
            file = strrchr(DIR_FILE, '/') + 1;
        
        printf("file-> file [%s]
    ", file);
    
        return 0;
    }

    运行结果

    dir_file-> file [test]
    file-> file [test]

    9. strlen
    函数原型: unsigned int strlen(char * str);
    函数功能: 统计字符串str中字符的个数(不包括终止符'')
    函数返回: 返回字符串的长度.
    /**
    * strlen - Find the length of a string
    * @s: The string to be sized
    */
    size_t strlen(const char * s)
    {
    const char *sc;

    for (sc = s; *sc != ''; ++sc)
    /* nothing */;
    return sc - s;
    }
    10. strnlen
    /**
    * strnlen - Find the length of a length-limited string
    * @s: The string to be sized
    * @count: The maximum number of bytes to search
    */
    size_t strnlen(const char * s, size_t count)
    {
    const char *sc;

    for (sc = s; count-- && *sc != ''; ++sc)
    /* nothing */;
    return sc - s;
    }

    11. memset
    函数原型: void *memset(void *s, int c, size_t n)
    函数功能: 字符串中的n个字节内容设置为c
    函数返回:
    参数说明: s-要设置的字符串,c-设置的内容,n-长度
    所属文件: <string.h>,<mem.h>
    /**
    * memset - Fill a region of memory with the given value
    * @s: Pointer to the start of the area.
    * @c: The byte to fill the area with
    * @count: The size of the area.
    *
    * Do not use memset() to access IO space, use memset_io() instead.
    */
    void * memset(void * s,int c,size_t count)
    {
    char *xs = (char *) s;

    while (count--)
    *xs++ = c;

    return s;
    }
    12. bcopy
    /**
    * bcopy - Copy one area of memory to another
    * @src: Where to copy from
    * @dest: Where to copy to
    * @count: The size of the area.
    *
    * Note that this is the same as memcpy(), with the arguments reversed.
    * memcpy() is the standard, bcopy() is a legacy BSD function.
    *
    * You should not use this function to access IO space, use memcpy_toio()
    * or memcpy_fromio() instead.
    */
    char * bcopy(const char * src, char * dest, int count)
    {
    char *tmp = dest;

    while (count--)
    *tmp++ = *src++;

    return dest;
    }

    13. memcpy
    函数原型: void *memcpy(void *dest, const void *src, size_t n)
    函数功能: 字符串拷贝
    函数返回: 指向dest的指针
    参数说明: src-源字符串,n-拷贝的最大长度
    所属文件: <string.h>,<mem.h>
    /**
    * memcpy - Copy one area of memory to another
    * @dest: Where to copy to
    * @src: Where to copy from
    * @count: The size of the area.
    *
    * You should not use this function to access IO space, use memcpy_toio()
    * or memcpy_fromio() instead.
    */
    void * memcpy(void * dest,const void *src,size_t count)
    {
    char *tmp = (char *) dest, *s = (char *) src;

    while (count--)
    *tmp++ = *s++;

    return dest;
    }
    14. memcmp
    /**
    * memcmp - Compare two areas of memory
    * @cs: One area of memory
    * @ct: Another area of memory
    * @count: The size of the area.
    */
    int memcmp(const void * cs,const void * ct,size_t count)
    {
    const unsigned char *su1, *su2;
    int res = 0;

    for( su1 = cs, su2 = ct; 0 < count; ++su1, ++su2, count--)
    if ((res = *su1 - *su2) != 0)
    break;
    return res;
    }
    15. memscan
    /**
    * memscan - Find a character in an area of memory.
    * @addr: The memory area
    * @c: The byte to search for
    * @size: The size of the area.
    *
    * returns the address of the first occurrence of @c, or 1 byte past
    * the area if @c is not found
    */
    void * memscan(void * addr, int c, size_t size)
    {
    unsigned char * p = (unsigned char *) addr;

    while (size) {
    if (*p == c)
    return (void *) p;
    p++;
    size--;
    }
    return (void *) p;
    }
    16. strstr
    /**
    * strstr - Find the first substring in a %NUL terminated string
    * @s1: The string to be searched
    * @s2: The string to search for
    */
    char * strstr(const char * s1,const char * s2)
    {
    int l1, l2;

    l2 = strlen(s2);
    if (!l2)
    return (char *) s1;
    l1 = strlen(s1);
    while (l1 >= l2) {
    l1--;
    if (!memcmp(s1,s2,l2))
    return (char *) s1;
    s1++;
    }
    return NULL;
    }

    17. memchr
    /**
    * memchr - Find a character in an area of memory.
    * @s: The memory area
    * @c: The byte to search for
    * @n: The size of the area.
    *
    * returns the address of the first occurrence of @c, or %NULL
    * if @c is not found
    */
    void *memchr(const void *s, int c, size_t n)
    {
    const unsigned char *p = s;
    while (n-- != 0) {
    if ((unsigned char)c == *p++) {
    return (void *)(p-1);
    }
    }
    return NULL;
    }

  • 相关阅读:
    Doubles
    The 3n + 1 problem
    Counterfeit Dollar
    Maya Calendar
    08_python的列表、元祖、字符串、字典及公共方法
    07_python的函数
    06_python的while语句
    05_python的if语句
    04_python基本的输入输出函数
    03_python的数据类型和变量的定义及使用
  • 原文地址:https://www.cnblogs.com/embedded-linux/p/6012800.html
Copyright © 2020-2023  润新知