【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;elsereturn 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等更多字符串函数。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/727623.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Eclipse左边project框如何打开?

1、点击Eclipse顶端window 2、点击Show View 3、点击Project Explorer。 如下图&#xff08;图片转自其他博主&#xff09;。

大疆这里的工作待遇简直太好了

我来天空之城实习已经一个月了&#xff0c;这里的工作待遇简直太好了&#xff01;在大疆&#xff0c;不仅有舒适的办公椅&#xff0c;可升降的定制工位&#xff0c;还有员工零食间、健身房、下午茶、文创店、理发店&#xff0c;甚至还有羽毛球每日有局。此外&#xff0c;我们还…

自动化测试之web自动化(Selenium)

&#x1f525; 交流讨论&#xff1a;欢迎加入我们一起学习&#xff01; &#x1f525; 资源分享&#xff1a;耗时200小时精选的「软件测试」资料包 &#x1f525; 教程推荐&#xff1a;火遍全网的《软件测试》教程 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1…

大模型日报|今日必读的6篇大模型论文

1.天津大学提出SheetAgent&#xff1a;通过大模型进行电子表格推理和操作 电子表格操作能显著提高工作效率&#xff0c;已经被广泛用于大多数日常工作中。大型语言模型&#xff08;LLM&#xff09;已被尝试用于电子表格的自动操作&#xff0c;但尚未在存在推理挑战的复杂现实任…

关于MediaEval数据集的Dataset构建(Text部分-使用PLM BERT)

import random import numpy as np import pandas as pd import torch from transformers import BertModel,BertTokenizer from tqdm.auto import tqdm from torch.utils.data import Dataset import re """参考Game-On论文""" ""&qu…

C++:设计包含min 函数的栈

目录 题目 代码实现 输出 题目 定义栈的数据结构&#xff0c;要求添加一个min 函数&#xff0c;能够得到栈的最小元素。 要求函数min、push 以及pop 的时间复杂度都是O(1)。 代码实现 #include <iostream>template<typename T>class stack { public:stack() {…

k倍区间c++

题目 输入样例&#xff1a; 5 2 1 2 3 4 5输出样例&#xff1a; 6 思路 本题默认所有读者已经理解了如何求前缀和。 可以利用双层循环分别枚举左端点和右端点即可枚举完所有区间&#xff0c;而对于每个区间&#xff0c;利用一维前缀和判断它是否是一个k倍区间&#xff0c;是…

GraphQL

从表中查询10条数据 {user_info(_limit: 100) {idname} }根据id查询数据 {user_info(_where: {id: 1727515006802587648}_order_by: {create_time: _desc}_limit: 10) {idname} }外键联表查询(特别注意写法:update_by.id): {speaker_info(update_by.id: {_eq: 1729043650301…

外包干了8天,技术退步明显。。。。。

先说一下自己的情况&#xff0c;本科生&#xff0c;19年通过校招进入杭州某软件公司&#xff0c;干了接近3年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:PanGesture)

拖动手势事件&#xff0c;当滑动的最小距离超过设定的最小值时触发拖动手势事件。 说明&#xff1a; 从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 接口 PanGesture(value?: { fingers?: number; direction?: PanDir…

sudo command not found

文章目录 一句话Intro其他操作 一句话 sudo 某命令 改成 sudo -i 某命令 试试。 -i 会把当前用户的环境变量带过去&#xff0c;这样在sudo的时候&#xff0c;有更高的权限&#xff0c;有本用户的环境变量(下的程序命令)。 -i, --login run login shell as the target user; a …

腾讯云学生服务器申请入口、续费优惠价格和常见问题解答

2024年腾讯云学生服务器优惠活动「云校园」&#xff0c;学生服务器优惠价格&#xff1a;轻量应用服务器2核2G学生价30元3个月、58元6个月、112元一年&#xff0c;轻量应用服务器4核8G配置191.1元3个月、352.8元6个月、646.8元一年&#xff0c;CVM云服务器2核4G配置842.4元一年&…

Gemini 初体验

1 使用体验 同样需要科学上网。速度很快&#xff0c;而且还不要钱&#xff0c;据说使用太多可能被限流。对于小语种翻译效果比 GPT-4 好&#xff0c;其它还没测试。可通过 ChatBox 界面调用&#xff0c;也可使用 Python 调用。 2 使用 ChatBox 方式调用 在 build with gemin…

【目标分类检测测试指标】

目标分类指标 目标分类指标是指在机器学习和深度学习中&#xff0c;用于衡量模型对目标类别预测准确度的一系列评价标准。以下是一些常见的目标分类指标及其详细说明&#xff0c;并附上Python代码示例&#xff08;以PyTorch为例&#xff09;&#xff1a; 准确率&#xff08;Ac…

应用层协议--HTTP

目录 一.HTTP是什么&#xff1f; 二.HTTP的请求和响应 a.请求&#xff1a; b.响应&#xff1a; 三.URL 四.Header 1.Host 2. Content-Length 3. Content-Type a. 请求 b. 响应 4. Referer 5. User-Agent 6. Cookie 一.HTTP是什么&#xff1f; HTTP是一种应用层协议&#xff0c…

springboot实现多线程开发(使用@Async注解,简单易上手)

根据springboot的核心思想便捷开发&#xff0c;使用多线程也变得简单起来&#xff0c;通过一下几个步骤即可实现。 核心注解 EnableAsync将此注解加在启动类上&#xff0c;使项目支持多线程。 Async 使用我们的Async注解在所需要进行多线程的类上即可实现。 配置线程池 …

算法刷题Day1 | 704.二分查找、27.移除元素

目录 0 引言1 二分查找1.1 我的解题1.2 修改后1.3 总结 2 移除元素2.1 暴力求解2.2 双指针法&#xff08;快慢指针&#xff09; &#x1f64b;‍♂️ 作者&#xff1a;海码007&#x1f4dc; 专栏&#xff1a;算法专栏&#x1f4a5; 标题&#xff1a;代码随想录算法训练营第一天…

【MySQL】子查询优化、排序优化和覆盖索引

一、子查询优化 子查询可以通过一个SQL语句实现比较复杂的查询。但是子查询的效率不高。原因在于 执行子查询时&#xff0c;MySQL为内层查询语句的结果建立一个临时表&#xff0c;在查询结束后&#xff0c;会撤销这些临时表。这就导致消耗过多的CPU和IO资源&#xff0c;产生大…

AI 训练中 不收敛、欠拟合、过拟合、泛化能力是什么意思?

问题描述&#xff1a; AI 训练中 不收敛、欠拟合、过拟合、泛化能力是什么意思&#xff1f; 解答&#xff1a; 在人工智能&#xff08;AI&#xff09;训练过程中&#xff0c;你可能会遇到几个常见的问题&#xff0c;如不收敛、欠拟合、过拟合以及泛化能力的问题。这些问题通…

什么是攻防演练,能给企业带来什么

随着互联网技术的发展和企业信息化程度的提高&#xff0c;企业面临的网络安全威胁越来越多。为了保护企业的信息安全&#xff0c;攻防演练已经成为企业安全运营中不可或缺的一部分。攻击者通常会利用各种方法来破坏企业的安全系统和数据&#xff0c;因此企业需要像攻击者一样思…