当前位置: 首页 > news >正文

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

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

相关文章:

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

前言&#xff1a; 在学习C语言的过程中&#xff0c;字符串、字符数组等对新手来说总是会有疏忽&#xff0c;在已有的库函数中&#xff0c;我们平时用到最多的就是关于字符串的函数&#xff0c;今天我们就来详细学习字符串函数的相关内容。 下面我们就开始讲解字符串函数&#x…...

算法沉淀——动态规划之其它背包问题与卡特兰数(leetcode真题剖析)

算法沉淀——动态规划之其它背包问题与卡特兰数 二维费用的背包问题01.一和零02.盈利计划 似包非包组合总和 Ⅳ 卡特兰数不同的二叉搜索树 二维费用的背包问题 01.一和零 题目链接&#xff1a;https://leetcode.cn/problems/ones-and-zeroes/ 给你一个二进制字符串数组 strs…...

selenium中ChromeDriver配置,一把过,并且教你伪装

最近正值毕业季&#xff0c;我之前不是写了个问卷星代码嘛&#xff0c;昨晚上有人凌晨1点加我&#xff0c;问我相关内容。 由于我之前C盘重装了一下&#xff0c;导致我很多东西空有其表&#xff0c;实际不能用&#xff0c;借此机会&#xff0c;向大家编写ChromeDriver配置&…...

vue3 + vite 项目可以使用纯Js开发吗?

答案&#xff1a;可以 创建项目&#xff1a; 按照链接参考或者按官方&#xff1a; webstorm 创建vue3 vite 项目-CSDN博客 项目目录 tsconfig.json 配置允许js allowJs指定是否编译js文件&#xff0c;在任意文件当中,如果我们模块使用js写的&#xff0c;那么我们需要 将all…...

Java EE之线程安全问题

一.啥是线程安全问题 有些代码&#xff0c;在单个线程执行时完全正确&#xff0c;但同样的代码让多个线程同时执行&#xff0c;就会出现bug。例如以下代码&#xff1a; 给定一个变量count&#xff0c;让线程t1 t2分别自增5000次&#xff0c;然后进行打印&#xff0c;按理说co…...

掌握Nodejs高级图片压缩技巧提升web优化

掌握Nodejs高级图片压缩技巧提升web优化 在当今的数字时代,图像在网络开发中发挥着至关重要的作用。它们增强视觉吸引力、传达信息并吸引用户。然而,高质量的图像通常有一个显着的缺点——较大的文件大小会减慢网页加载时间。为了应对这一挑战并确保快速加载网站,掌握 Node…...

C++初阶 类(上)

目录 1. 什么是类 2. 如何定义出一个类 3. 类的访问限定符 4. 类的作用域 5. 类的实例化 6. 类的大小 7. this指针 1.this指针的引出 2. this指针的特性 8. 面试题 1. 什么是类 在C语言中&#xff0c;不同类型的数据集合体是结构体。为了方便管理结构体&#xff0c;我…...

图片速览 BitNet: 1-bit LLM

输入数据 模型使用absmax 量化方法进行b比特量化,将输入量化到 [ − Q b , Q b ] ( Q b 2 b − 1 ) \left[-Q_{b},Q_{b}\right](Q_{b}2^{b-1}) [−Qb​,Qb​](Qb​2b−1) x ~ Q u a n t ( x ) C l i p ( x Q b γ , − Q b ϵ , Q b − ϵ ) , Clip ⁡ ( x , a , b ) ma…...

金融基础——拨备前利润和拨备后利润介绍

一、简介 拨备前利润&#xff08;PreProvision Operating Profit&#xff0c;也就是PPOP&#xff09;和拨备后利润的主要区别在于是否扣除减值准备金、是否遵循保守性原则以及显示的利润数值不同。 拨备前利润。指在计算利润时没有扣除减值准备金的利润&#xff0c;它等于税前…...

网络编程作业day7

作业项目&#xff1a;基于UDP的聊天室 服务器代码&#xff1a; #include <myhead.h>//定义客户信息结构体 typedef struct magtye {char type; //消息类型char name[100]; //客户姓名char text[1024]; //客户发送聊天信息 }msg_t;//定义结构体存储…...

【Vision Pro杀手级应用】3D音乐会/演唱会,非VR视频播放的形式,而是实实在在的明星“全息”形象,在你的面前表演

核心内容形式:体积视频 参考对标案例深度解读: 体积视频,这一全新的内容形式,正在引领我们进入一个前所未有的四维体验时代。它将传统的演艺形式推向了新的高度,让我们能够更加深入地沉浸在虚拟世界中,感受前所未有的视听盛宴。 在这一领域,有一个引人注目的案例,那…...

变频器学习

西门子变频器 SINAMICS V20 入门级变频器 SINAMICS G120C...

Linux Ubuntu系统安装MySQL并实现公网连接本地数据库【内网穿透】

文章目录 前言1 .安装Docker2. 使用Docker拉取MySQL镜像3. 创建并启动MySQL容器4. 本地连接测试4.1 安装MySQL图形化界面工具4.2 使用MySQL Workbench连接测试 5. 公网远程访问本地MySQL5.1 内网穿透工具安装5.2 创建远程连接公网地址5.3 使用固定TCP地址远程访问 前言 本文主…...

0048__Unix传奇

Unix传奇 &#xff08;上篇&#xff09;_unix传奇(上篇)-CSDN博客 Unix传奇 &#xff08;下篇&#xff09;-CSDN博客 Unix现状与未来——CSDN对我的采访_nuix邮件系统行业地位-CSDN博客...

蓝桥杯-排序

数组排序 Arrays.sort(int[] a) 这种形式是对一个数组的所有元素进行排序&#xff0c;并且时按从小到大的顺序。 package Work;import java.util.*;public class Imcomplete {public static void main(String args[]) {int arr[]new int [] {1,324,4,5,7,2};Arrays.sort(arr)…...

计算机设计大赛 深度学习的视频多目标跟踪实现

文章目录 1 前言2 先上成果3 多目标跟踪的两种方法3.1 方法13.2 方法2 4 Tracking By Detecting的跟踪过程4.1 存在的问题4.2 基于轨迹预测的跟踪方式 5 训练代码6 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于深度学习的视频多目标跟踪实现 …...

高性能JSON框架之FastJson的简单使用

高性能JSON框架之FastJson的简单使用、 1.前言 1.1.FastJson的介绍: JSON协议使用方便&#xff0c;越来越流行,JSON的处理器有很多,这里我介绍一下FastJson,FastJson是阿里的开源框架,被不少企业使用,是一个极其优秀的Json框架,Github地址: FastJson 1.2.FastJson的特点: 1.F…...

★判断素数的几种方法(由易到难,由慢到快)

素数的定义&#xff1a; 素数&#xff0c;又称为质数&#xff0c;指的是“大于1的整数中&#xff0c;只能被1和这个数本身整除的数”。换句话说&#xff0c;素数是只有两个正约数&#xff08;1和本身&#xff09;的自然数。素数在数论中有着重要的地位&#xff0c;且素数的个数…...

vue svelte solid 虚拟滚动性能对比

前言 由于svelte solid 两大无虚拟DOM框架&#xff0c;由于其性能好&#xff0c;在前端越来越有影响力。 因此本次想要验证&#xff0c;这三个框架关于实现表格虚拟滚动的性能。 比较版本 vue3.4.21svelte4.2.12solid-js1.8.15 比较代码 这里使用了我的 stk-table-vue(np…...

IDEA中新增文件,弹出框提示是否添加到Git点错了,怎么重新设置?

打开一个配置了Git的项目&#xff0c;新增一个文件&#xff0c;会弹出下面这个框。提示是否将新增的文件交给Git管理。 一般来说&#xff0c;会选择ADD&#xff0c;并勾选Dont ask agin&#xff0c;添加并不再询问。如果不小心点错了&#xff0c;可在IDEA中重新设置&#xff08…...

OpenClaw开发辅助:Qwen3.5-9B实现日志分析与错误自动修复

OpenClaw开发辅助&#xff1a;Qwen3.5-9B实现日志分析与错误自动修复 1. 为什么需要AI辅助日志分析&#xff1f; 每次凌晨被报警短信吵醒&#xff0c;盯着密密麻麻的日志文件找异常时&#xff0c;我都会想&#xff1a;如果能有个AI助手帮我自动分析日志、定位问题甚至尝试修复…...

使用AI大大提升了学习代码的效率

最近看到一个观点&#xff0c;说AI的发展导致代码越来越不值钱了&#xff0c;AI降低了我们学习的门槛&#xff0c;大大提升了学习效率。好像很多程序都可以一个人一天上架一款产品。或许有夸张成分&#xff0c;但像我们普通人都体验到了AI的方便&#xff0c;比如在项目开发的过…...

医药行业用友 YonSuite 一体化管理方案

医保新规 4 月 1 日落地&#xff5c;医药企业破局&#xff1a;数智化 合规 精细化&#xff0c;活下去且活得好2026 年 4 月 1 日&#xff0c;医保新规全面执行&#xff0c;集采深化、价格严控、全链路监管&#xff0c;医药行业正式告别高毛利、粗放式、渠道为王的旧时代&…...

别再死记公式了!用Python+Matplotlib亲手仿真LC并联谐振,直观理解选频原理

用PythonMatplotlib动态仿真LC并联谐振&#xff1a;从代码到物理直觉的沉浸式探索 当教科书上的LC并联谐振公式变成屏幕上跳动的曲线&#xff0c;当抽象的Q值概念转化为滑块调节时的实时波形变化&#xff0c;电子工程的学习便从枯燥的符号演算升维为一场充满探索乐趣的科学实验…...

轨迹规划实战:用多项式插值+粒子群玩转机械臂运动优化

轨迹规划 路径规划 matlab 353多项式插值 基于改进粒子群算法 时间最优 针对六自由度 四自由度都可以&#xff0c;轨迹规划&#xff0c;多项式插值&#xff0c;更改轨迹点位置就可以搞机器人轨迹规划最头疼的就是既要轨迹丝滑又要时间最短。今天咱们用Matlab整点狠活—…...

开源条码字体技术:如何通过字体文件彻底改变条码生成方式

开源条码字体技术&#xff1a;如何通过字体文件彻底改变条码生成方式 【免费下载链接】librebarcode Libre Barcode: barcode fonts for various barcode standards. 项目地址: https://gitcode.com/gh_mirrors/li/librebarcode 条码生成技术长期以来依赖专业软件和专用…...

TEA加密算法实战:用Python和C语言实现QQ同款加密(附完整代码)

TEA加密算法实战&#xff1a;从原理到跨语言实现 在即时通讯和物联网设备中&#xff0c;数据安全传输一直是核心需求。TEA&#xff08;Tiny Encryption Algorithm&#xff09;以其轻量级、高效率的特性&#xff0c;成为资源受限环境下的理想选择。本文将深入探讨TEA算法家族的工…...

3秒获取全网歌词:163MusicLyrics让多平台歌词提取效率提升10倍

3秒获取全网歌词&#xff1a;163MusicLyrics让多平台歌词提取效率提升10倍 【免费下载链接】163MusicLyrics Windows 云音乐歌词获取【网易云、QQ音乐】 项目地址: https://gitcode.com/GitHub_Trending/16/163MusicLyrics 在数字音乐时代&#xff0c;歌词已成为音乐体验…...

深入解析 Linux 内核中的 PCI 中断向量分配机制:pci_alloc_irq_vectors

1. PCI中断向量分配机制入门指南 第一次接触PCI设备中断处理时&#xff0c;我被各种专业术语搞得晕头转向。直到在项目里实际调试一个网卡驱动时&#xff0c;才真正理解pci_alloc_irq_vectors这个函数的重要性。想象一下&#xff0c;你的电脑就像个繁忙的快递分拣中心&#xf…...

计算机毕业设计springboot在线病患管理系统 基于SpringBoot的智慧医疗就诊服务平台设计与实现 基于Java Web的医院数字化门诊住院一体化系统开发

计算机毕业设计springboot在线病患管理系统79jbb1co &#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。随着我国医疗资源分布不均、基层医疗服务能力不足等问题的日益凸显&#xff…...