【C语言】【字符串函数】【超详解】【上】!!!

简介: 【C语言】【字符串函数】【超详解】【上】!!!

1.strlen函数的使用和模拟实现

size_t strlen ( const char * str);

1、strlen函数是用来求字符串长度的函数,它的参数必须是字符串的地址,并且是以’\0‘作为结束标志


2、strlen函数的返回类型是无符号整形,所以两个strlen(arr1)-strlen(arr2)的结果不可能为负数,这样比较字符串长度的方式是不对的


3、strlen函数所需要的头文件为<string.h>


strlen函数的应用

#include<stdio.h>
#include<string.h>
int main()
{
    char arr1[] = "abcdef";
    char arr2[] = "bbbbb";
    if (strlen(arr1) - strlen(arr2) > 0)/*这就是上面提到的错误,
    因为strlen返回类型为无符号整型,所以当这两个数相减为负值时实际上在内存中是一个很大的正整数*/
    {
        printf(">\n");
    }
    else
    {
        printf("<=\n");
    }
    return 0;
}

strlen函数的模拟实现

方法1:

//创建临时变量
int my_strlen(const char* str)
{
    int count = 0;
    assert(str);
    while (*str != '\0')
    {
        count++;
        str++;
    }
    return count;
}

方法2:

//使用递归
int my_strlen(const char* str)
{
    assert(str);
    if (*str == '\0')
        return 0;
    else
        return 1 + my_strlen(++str);
}

方法3:

//指针-指针
int my_strlen(const char* str)
{
    assert(str);
    char* p = str;
    while (*str != '\0')
    {
        str++;
    }
    return str - p;
}

上面的几种模拟实现strlen函数的方法都涉及到assert函数,如果有不理解可以看我之前一篇:C语言——assert函数

2.strcpy函数的使用及模拟实现

char* strcpy(char * des,const char * source );

1、strcpy函数返回类型为指针

2、strcpy函数会将源字符串后第一个'\0'一并复制到目标字符串

3、目标字符串的空间必须足够大,不然容易造成溢出

strcpy函数的使用

#include<stdio.h>
#include<string.h>
int main()
{
    char arr1[] = "abcdef";
    char arr2[20] = { 0 };
    strcpy(arr2, arr1);
    printf("%s\n", arr2);
    return 0;
}

strcpy函数的模拟实现

char* my_strcpy(char* arr2, const char* arr1)//函数返回类型为指针
{
    assert(arr1 && arr2);//确保arr1和arr2都不为空
    char* p = arr2;
    while (*arr2++ = *arr1++)//将arr1中的值一个一个传给arr2
    {
        ;
    }
    return p;//返回arr2的原地址
}

3.strcat函数的使用及模拟实现

char* strcpy(char * des,const char * source );

strcat函数返回类型及使用要求与strcpy函数基本一致,可以看上面的

strcat函数的使用

#include<stdio.h>
#include<string.h>
int main()
{
    char arr1[20] = "I am ";//arr1空间要足够大
    char arr2[] = "zhangsan";
    strcat(arr1, arr2);
    printf("%s\n", arr1);
    return 0;
}

strcat函数的模拟实现

char* my_strcat(char* arr1, const char* arr2)
{
    assert(arr1 && arr2);
    char* p = arr1;
    while (*arr1 != '\0')
    {
        arr1++;
    }
    while (*arr2 != '\0')
    {
        *arr1 = *arr2;
        arr1++;
        arr2++;
    }
    return p;//返回arr1的原地址
}

4.strcmp函数的使用及模拟实现

int strcmp(const char * arr1,const char * arr2 );

strcmp函数返回类型是整形,大于返回整数,小于返回负数,等于返回0

strcmp函数的使用

#include<stdio.h>
#include<string.h>
int main()
{
    char arr1 = "abcdef";
    char arr2 = "bbbbb";
    int ret = strcmp(arr1, arr2);
    if (ret > 0)
    {
        printf(">\n");
    }
    else if (ret < 0)
    {
        printf("<\n");
    }
    else
    {
        printf("=\n");
    }
    return 0;
}

strcmp函数的模拟实现

int my_strcmp(const char* arr1, const char* arr2)
{
    asssrt(arr1 && arr2);
    while (*arr1 == *arr2)
    {
        if (*arr1 == '\0')
            return 0;
        arr1++;
        arr2++;
    }
    return *arr2 - *arr1;
}

5.字符转换函数

C语言提供两种字符转换函数:

char towlower(char c);//将传进去的大写字母转换成小写字母
char towupper(char c);//将传进去的小写字母转换成大写字母

函数使用

#include<stdio.h>
#include<string.h>
int main()
{
    printf("%c\n", towlower('A'));
    printf("%c\n", towupper('a'));
    return 0;
}

上面几个函数就是C语言中用的最多的几个字符串函数,在下一篇我们将继续探索C语言中更多的字符串函数,欲知后事,还请点赞加关注,在接下来的一篇,我们将一同探索strstr、strtok、strerror等更多字符串函数。

创作不易,还请一键三连!!!

相关文章
|
1月前
|
C语言 C++
【C语言】解决不同场景字符串问题:巧妙运用字符串函数
【C语言】解决不同场景字符串问题:巧妙运用字符串函数
|
23天前
|
存储 C语言
【c语言】字符串函数和内存函数
本文介绍了C语言中常用的字符串函数和内存函数,包括`strlen`、`strcpy`、`strcat`、`strcmp`、`strstr`、`strncpy`、`strncat`、`strncmp`、`strtok`、`memcpy`、`memmove`和`memset`等函数的使用方法及模拟实现。文章详细讲解了每个函数的功能、参数、返回值,并提供了具体的代码示例,帮助读者更好地理解和掌握这些函数的应用。
19 0
|
1月前
|
存储 安全 编译器
深入C语言库:字符与字符串函数模拟实现
深入C语言库:字符与字符串函数模拟实现
|
1月前
|
C语言
C语言常见字符函数和字符串函数精讲
C语言常见字符函数和字符串函数精讲
|
1月前
|
C语言
【C语言】模拟实现深入了解:字符串函数
【C语言】模拟实现深入了解:字符串函数
|
3月前
|
安全 程序员 C语言
【C语言】字符串函数及其模拟实现
【C语言】字符串函数及其模拟实现
|
3月前
|
C语言
【C语言篇】字符和字符串以及内存函数详细介绍与模拟实现(下篇)
perror函数打印完参数部分的字符串后,再打印⼀个冒号和⼀个空格,再打印错误信息。
61 0
|
3月前
|
存储 安全 编译器
【C语言篇】字符和字符串以及内存函数的详细介绍与模拟实现(上篇)
当然可以用scanf和printf输入输出,这里在之前【C语言篇】scanf和printf万字超详细介绍(基本加拓展用法)已经讲过了,这里就不再赘述,主要介绍只针对字符的函数.
54 0
|
4月前
|
存储 缓存 C语言
【C语言】字符函数,字符串函数,内存函数
C语言中的字符串函数和内存函数
54 0
【C语言】字符函数,字符串函数,内存函数
|
5月前
|
C语言
【c语言】字符串函数的模拟实现(二)
【c语言】字符串函数的模拟实现(二)
25 1