常用字符串函数

简介: 常用字符串函数

在这里插入图片描述

@TOC

1、求字符串的长度🚩

1.Sizeof操作符求法

int main()
{
    char arr[] = "abcde";
    int n = sizeof(arr) / sizeof(arr[0])-1;
    printf("%d", n);
    return 0;
}

在这里插入图片描述

这里运用sizeof操作符所求的是字符串所有的元素,包含尾部的\0,所以我们要在后面减一。

2.strlen库函数

#include<stdio.h>
int main() {
    char arr[] = "abcde";
    int n = strlen(arr);
    printf("%d", n);
    return 0;
}

大家可以直接使用strlen库函数,求出来的直接就是字符的个数,注意引入#include<string.h>头文件

3.自定义my_strlen函数

在这里插入图片描述

⚠️⚠️⚠️ 在这里参考库函数的参数,给出大家三种实现自定义的方法:
==1.计数器法
2.指针-指针==
==3.递归==

1.计数器法

size_t my_strlen(const char* arr)
{
    int count = 0;
    while (*arr)
    {
        arr++;
        count++;
    }
    return count;
}

2.指针-指针

size_t my_strlen(const char* arr)
{
    char* src = arr;
    while (*src != '/0')
        src++;
    return src - arr;
}

3.递归

size_t my_strlen(const char* arr)
{
    if (*arr == '\0')
        return 0;
    else return 1 + my_strlen(arr + 1);
}

2、字符串的复制🚩

1.错误示范

int main()
{
    char name[20] = { 0 };
    name = "zhangsan";
    printf("%s", name);
    return 0;
}

![
](https://ucc.alicdn.com/images/user-upload-01/22cfa46ecfa24a44be741e13ca4d00c6.png)

⚠️⚠️⚠️ 很明显这个报错了,因为name是一个地址,不能不一组字符赋给地址

2.strcpy库函数

#include<string.h>
int main()
{
    char name[20] = {0};
    char arr[] = "abcde";
    strcpy(name, arr);
    printf("%s", name);
    return 0;
}

在这里插入图片描述

在使用strcpy库函数仍需要注意几个点,数组一定要创建的大一点,不然会存不下复制的数据,造成内存越界,还有就是记得引入头文件

3.自定义my_strcpy函数

在这里插入图片描述

char *my_strcpy(char* dest, const char* src)
{
    assert(dest && src);
    char* ch = dest;
    while (*dest++ = *src++)
        ;
    return ch;

}
int main()
{
    char arr[20] = { 0 };
    my_strcpy(arr, "woyaojindachang");
    printf("%s", arr);
    return 0;
}

3、实现字符串连接🚩

1.使用strcat库函数

#include<string.h>
int main()
{
    char arr[20] = "hello ";
    char arr1[] = "dachang";
    strcat(arr, arr1);
    printf("%s", arr);
    return 0;
}

在这里插入图片描述
在这里插入图片描述

strcat基本实现就是,目标数组先进行找,找到\0之后,在进行连接,用来源数组第一个元素替换掉\0,以此类推

2.自定义my_strcat函数

在这里插入图片描述

char *my_strcat(char* dest, const char* src)
{
    char* ch = dest;
    assert(dest && src);
    while (*dest != '\0')
        dest++;
    while (*dest++ = *src++)
        ;
    return ch;

}
int main()
{
    char arr[] = "hello ";
    my_strcat(arr, "dachang");
    printf("%s",arr);
    return 0;
}

4、判断字符串是否相等🚩

1.错误示范

int main()
{
    char arr1[] = "adcd";
    char arr2[] = "abcd";
    if (arr1 == arr2)
    {
        printf("yes");
    }
    else
    {
        printf("no");
    }
    return 0;
}

在这里插入图片描述

大家可以思考一下这里为什么,输出的是no,而不是yes,因为在比较两个字符串是否相等时,如果直接用数组名去判断是否相等话,实际实在判断两个数组首地址是否相等,因为arr1和arr2是分别在内存空间中创建的,两个首地址不相等,所以才会输出no。

2.strcmp库函数

#include<stdio.h>
int main()
{
    char arr1[] = "adcd";
    char arr2[] = "abcd";
    if (strcmp(arr1,arr2))
    {
        printf("yes");
    }
    else
    {
        printf("no");
    }
    return 0;
}

在这里插入图片描述

:mag_right::mag_right::mag_right: 在这里我们使用了下strcmp库函数,函数的两个参数是两个字符串,返回值分为三类,>0,<0,==0,在使用时,一定要注意引头文件#include<string.h>不然系统会报错。

3.自定义my_strcmp函数

在这里插入图片描述
在这里参考一下官方的设计参数

int my_strcmp(const char* dest, const char* src)
{
    assert(dest && src);

    while (*dest!='/0'&& *src!='\0'&& * dest == *src)
    {
        dest++;
        src++;
    }
    return (*dest - *src);
}

总结

![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/0fe2f8028bd549ff9d907b5a113f2ae7.jpeg#pic_center
)

📐📐📐 这一期的字符串相关函数就到这里了,其中有几个函数可以用好几种方法实现,大家可以自己动手实操一下,这样就能更好的掌握,也希望大家能多多支持。
目录
相关文章
|
1月前
|
安全 C语言 C++
|
6月前
|
安全 C语言
需要知道的字符串函数
需要知道的字符串函数
|
存储 C语言
字符串函数介绍&应用(一)
字符串函数介绍&应用
|
存储 C语言
字符串函数介绍&应用(二)
字符串函数介绍&应用
|
6月前
字符串函数
字符串函数
|
6月前
|
C语言
字符函数和字符串函数
字符函数和字符串函数
69 0
|
编译器
C详细的字符串函数
C详细的字符串函数
66 0
|
11月前
|
C语言
详解字符函数和字符串函数-2
详解字符函数和字符串函数
48 0
|
C语言
一文带你玩转C库中的一系列字符串函数
一文带你玩转C库中的一系列字符串函数
66 2
|
存储 安全
常用的字符函数和字符串函数
常用的字符函数和字符串函数
93 0