C语言字符串函数

在编程的过程中,我们经常要处理字符和字符串,为了⽅便操作字符和字符串,C语⾔标准库中提供了
⼀系列库函数,接下来我们就学习⼀下这些函数。

1.strlen的使用和模拟实现。

1.1strlen的使用

size_t  strlen ( const  char * str );

strlen函数的功能是统计字符串的个数,直至遇到'\0'停止。

对于strlen,我们要注意一下事项:

1.字符串以 '\0' 作为结束标志,strlen函数返回的是在字符串中 '\0' 前⾯出现的字符个数(不包
含 '\0' )。

2.字符串末尾必须有'\0'才能计算出正确值,否则会越界查找,直至遇到'\0'停止,从而使结果出现错误。

3.strlen的返回值是size_t类型,是无符号的数

这段代码运行结果为   3和随机值

因为str1末尾会自动添加一个'\0',而str2末尾没有'\0',故strlen会越界直至找到'\0'为止,故结果为随机值。

2.strlen的模拟实现

既然我们知道了strlen函数的功能,那么strlen函数怎么模拟实现呢?接下来我们就来模拟实现strlen函数。

方法一:计数器

在这段代码中,我们创建了一个临时变量count,当str指向的不是'\0',count就加一,最后返回count,从而模拟实现了strlen函数。

那么有没有不创建临时变量的方法来模拟实现strlen函数呢?

不创建临时变量的话,刚开始看到这要求可能会让我们无从下手,但是仔细想想不难发现我们可以用函数递归的方法来实现。

方法二:递归实现

        

方法三:指针运算

最开始p指向字符串的首字符,s也指向首字符,最后经过while循环后p指向了'\0',而p-s为指针减去指针,返回的是二者之间的元素个数,从而求出字符串的长度。

3.strcat的模拟实现

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

其中,dest 是目标字符串,src 是源字符串。strcat 函数将源字符串的内容追加到目标字符串的末尾,并返回指向目标字符串的指针

需要注意的是,目标字符串必须有足够的空间来容纳源字符串的内容,否则会发生未定义的行为(如内存溢出)。

需要注意的一点是strcat函数不能自己追加自己,否则会越界访问使程序崩溃!

像这样,我们就把str2的内容追加到了str1中,那么strcat又该如何模拟实现呢?

像这样,我们先通过ret指针接收dest,从而得到函数最终的返回值;

接着我们用while循环使dest指向str1的'\0';

最后我们进行字符串拷贝,从而模拟实现了strcat函数;

4.strcmp的使用和模拟实现

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

那么它是怎么比较的呢?

strcmp会比较两个字符串对应位置上(相同位置,比如第一位,第二位)的字符的ASCII值;

我们先来看下面这个例子:

那么strcmp怎么模拟实现呢?

5.strstr的使用和模拟实现

char*strstr(const char*str1,const char*str2);

它接受两个参数:

     str1:要在其中搜索的字符串。

     str2:要搜索的子字符串。

函数返回一个指向 str1中第一次出现 str2 的指针,如果未找到,则返回 NULL

这段代码简单的应用了一下strstr

那么strstr函数又该如何模拟实现呢?

这段代码模拟实现了strstr函数

  • 28
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
C语言字符串函数的原型可以在C标准库的string.h头文件中找到。其中一些常用的字符串函数的原型如下: 1. strlen函数的原型是:size_t strlen(const char *str); 这个函数用于计算字符串的长度,返回的是字符串中字符的个数,不包括空字符'\0'。 2. strcpy函数的原型是:char *strcpy(char *dest, const char *src); 这个函数用于将源字符串src复制到目标字符串dest中,并返回目标字符串的指针。 3. strcat函数的原型是:char *strcat(char *dest, const char *src); 这个函数用于将源字符串src追加到目标字符串dest的末尾,并返回目标字符串的指针。 4. strcmp函数的原型是:int strcmp(const char *str1, const char *str2); 这个函数用于比较两个字符串str1和str2的大小关系。如果str1小于str2,则返回一个负数;如果str1等于str2,则返回0;如果str1大于str2,则返回一个正数。 5. strchr函数的原型是:char *strchr(const char *str, int c); 这个函数用于在字符串str中查找字符c的第一次出现,并返回该字符的指针。 这些函数只是C语言字符串函数中的一部分,还有很多其他的字符串函数可以在string.h头文件中找到。 #### 引用[.reference_title] - *1* [C语言字符串函数及如何实现这些函数](https://blog.csdn.net/weixin_29007243/article/details/117020047)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [【经典】C语言字符串函数原型](https://blog.csdn.net/sinat_36184075/article/details/69372144)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [字符串查找函数C语言字符串查找函数详解](https://blog.csdn.net/weixin_35433448/article/details/117013859)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值