C标准库string.h中几个常用函数的使用详解

简介: C标准库string.h中几个常用函数的使用详解

strlen

计算字符串长度

size_t strlen(const char *str)


计算字符串 str 的长度,直到空结束字符,但不包括空结束字符。

函数实现:

int Strlen(const char *str)
{
    assert(str);
    int len = 0;
    while ((*str++) != '\0')len++;
    return len;
}


strcpy

字符串复制

char *strcpy(char *dest, const char *src)


把 src 所指向的字符串复制到 dest。

函数实现:

char *Strcpy(char *dst, const char *src)
{
    assert(dst && src);
    char *tmp = dst;
    while ((*dst++ = *src++) != '\0');
    return tmp;
}


strncpy

复制连续的n个字符

char *strncpy(char *dest, const char *src, size_t n)


把 src 所指向的字符串复制到 dest,最多复制 n 个字符。

函数实现:

char *Strncpy(char *dst, const char *src, int len)
{
    assert(dst&&src);
    char *tmp = dst;
    int offset = 0;
    if (len > strlen(src))
    {
        offset = len - strlen(src);
        len = strlen(src);
    }
    while (len--)
    {
        *dst++ = *src++;
    }
    while (offset--)
    {
        *dst++ = '\0';
    }
    return tmp;
}


strcat

把一个字符串连接到另一个字符串后面

char *strcat(char *dest, const char *src)


把 src 所指向的字符串追加到 dest 所指向的字符串的结尾。

函数实现:

char *Strcat(char *dst, const char* src)
{
    assert(dst && src);
    char *tmp = dst;
    while (*dst++);
    dst--;
    while (*dst++ = *src++);
    return tmp;
}


strncat

把连续的n个字符连接到另一个字符串后面

char *strncat(char *dest, const char *src, size_t n)

把 src 所指向的字符串追加到 dest 所指向的字符串的结尾,直到 n 字符长度为止。

函数实现:

char *Strncat(char *dst, const char* src, int len)
{
    assert(dst && src);
    char *tmp = dst;
    while (*dst++);
    dst--;
    while (len--)
    {
        *dst++ = *src++;
    }
    *dst = '\0';
    return tmp;
}


示例:

#include 
#include 
int main(void)
{
    char str0[20] = "Test:";
    char str1[20] = "Welcome9999";
    char str2[20] = " To ";
    char str3[20] = "0123Beijing55";
    char tmp[100];
    strcpy(tmp, str0);
    puts(tmp);      //Test:
    strncpy(tmp, str1, 7);  //取st1前7个字符
    puts(tmp);      //Welcome
    strcat(tmp, str2);      //连接str2
    puts(tmp);
    strncat(tmp, str3 + 4, 7);  //取str3+4之后的7个字符
    puts(tmp);
    return 0;
}


输出结果:

640.jpg


strchr

查找某字符在字符串中首次出现的位置指针,如果不存在则返回NULL

char *strchr(const char *str, int c)


在参数 str 所指向的字符串中搜索第一次出现字符 c(一个无符号字符)的位置。

函数实现:

char* My_strchr(char *s, char c)
{
    while(*s != '\0' && *s != c)
    {
        ++s;
    }
    return *s==c ? s : NULL;
}


示例:

#include 
#include 
int main(void)
{
    char string[20] = "This is a string";
    char *ptr1, *ptr2;
    char c1 = 'r', c2 = 'b';
    ptr1 = strchr(string, c1);
    ptr2 = strchr(string, c2);
    if(ptr1)
        printf("字符1:%c 的位置是: %s \n",c1,ptr1);
    else
        printf("字符1:%c 未找到 \n", c1);
    if(ptr2)
        printf("字符2:%c 的位置是: %s \n",c2,ptr2);
    else
        printf("字符2:%c 未找到 \n", c2);
    return 0;
}


输出结果:

640.jpg


strcmp

字符串比较

int strcmp(const char *str1, const char *str2)


把 str1 所指向的字符串和 str2 所指向的字符串进行比较。

设这两个字符串为str1,str2, 若str1=str2,则返回零; 若str1str2,则返回正数。

函数实现:

int Strcmp(char const *s1, char const *s2)
{
    assert(s1&&s2);
    while (*s1 == *s2 && *s1 != '\0' && *s2 != '\0')
    {
        s1++;
        s2++;
    }
    if (*s1 == *s2)
    {
        return 0;
    }
    else if (*s1 > *s2)
    {
        return 1;
    }
    return -1;
}


示例:

#include 
#include 
int main(void)
{
    char str1[20] = "abc";
    char str2[20] = "abc";
    char str3[20] = "bbc";
    int r1, r2, r3;
    r1 = strcmp(str1, str2);
    r2 = strcmp(str1, str3);
    r3 = strcmp(str3, str1);
    printf("r1 = %d, r2 = %d, r3 = %d \n", r1, r2, r3);
    return 0;
}


输出结果:

640.jpg


strstr

字符串查找

char *strstr(const char *haystack, const char *needle)


在字符串 haystack 中查找第一次出现字符串 needle(不包含空结束字符)的位置。

函数实现:

char *Strstr(char const *s1, char const *s2)
{
    assert(s1&&s2);
    const char *ps1, *ps2;
    ps1 = s1;
    ps2 = s2;
    while (*ps1)
    {
        const char *tmp = ps1;
        while (*tmp++ == *ps2++);
        if (*ps2 == '\0')
        {
            return (char*)ps1;
        }
        ps2 = s2;
        ps1++;
    }
    return NULL;
}


strncmp

int strncmp(const char *str1, const char *str2, size_t n)


把 str1 和 str2 进行比较,最多比较前 n 个字节。

函数实现:

int Strncmp(char const *s1, char const *s2, int len)
{
    assert(s1&&s2);
    while (len-- && *s1 == *s2 && *s1 != '\0' && *s2 != '\0')
    {
        s1++;
        s2++;
    }
    return *s1 - *s2;
}


memcpy

内存复制

void *memcpy(void *dest, const void *src, size_t n)


从 src 复制 n 个字符到 dest。

函数实现

void *Memcpy(char *dst, char const *src, int len)
{
    assert(dst && src);
    char *tmp = dst;
    const char *s = src;
    while (len--)
    {
        *dst++ = *src;
    }
    return tmp;
}


目录
相关文章
|
29天前
|
存储 缓存 测试技术
CMake String函数:如何巧妙地在cmake中操作字符串
CMake String函数:如何巧妙地在cmake中操作字符串
60 0
|
1月前
|
编译器 容器
C++string类的介绍及常用函数用法总结
C++string类的介绍及常用函数用法总结
29 1
|
3月前
|
编译器 C++
【编码艺术:掌握String类函数接口的妙用指南】(三)
【编码艺术:掌握String类函数接口的妙用指南】
|
3月前
|
C语言 C++ 容器
【编码艺术:掌握String类函数接口的妙用指南】(一)
【编码艺术:掌握String类函数接口的妙用指南】
|
3月前
|
存储 Linux C语言
【编码艺术:掌握String类函数接口的妙用指南】(二)
【编码艺术:掌握String类函数接口的妙用指南】
|
6月前
|
存储
C++-string常用函数整理(建议收藏)
C++-string常用函数整理(建议收藏)
|
7月前
String.format()函数的简单用法
1.String.format()函数的用法 2.常用转换符 3.常用标识
52 0
|
3月前
|
存储 Linux C++
【编码艺术:掌握String类函数接口的妙用指南】(四)
【编码艺术:掌握String类函数接口的妙用指南】
|
3月前
|
Python
python中split_string函数使用
python中split_string函数使用
23 0
|
4月前
|
SQL 关系型数据库 PostgreSQL
PostgreSQL【SQL 01】根据条件更新字段值或追加信息STRPOS(string, substring)函数使用及LIKE函数对比
PostgreSQL【SQL 01】根据条件更新字段值或追加信息STRPOS(string, substring)函数使用及LIKE函数对比
54 0