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

《重生到现代之从零开始的C语言生活》—— 字符函数和字符串函数

字符函数和字符串函数

字符分类函数

大家知道字符是分为很多种类型的
就比如说’a’ ‘1’ 'A’等等,所以我们需要一种函数来完成字符函数的分类
这就是字符分类函数

函数需要包含头文件<ctype.h>

函数的运行规则是:如果符合下列参数就返回真

  • inscntrl(控制任何字节)
  • isspace(空白字符:空格,\f,\n,\r,\t,\v)
  • isdigit(十进制数字’0’~'9’字符)
  • isxdigit(十六进制数字,包括十进制狮子字符,小写字母a~f,大写字母A到F)
  • islower(小写字母a~z)
  • isupper(大写字母A~Z)
  • isalnum(字母或者数字)
  • ispunct(标点符号,任何不属于数字或者字母的图形字符)
  • isgraph(任何图形字符)
  • isprint(任何可以打印字符,包括图形字符和空白字符)

我们该怎么使用这些函数呢?

int isupper(int c )

函数就是判断参数部分的c是否是大写字母
如果是大写字母,就返回非零的整数,如果不是大写,则返回0

字符转换函数

什么是字符转换函数呢?

就是可以将字符之间完成转换

int tolower (int c);//将参数传进去的大写字母转小写
int toupper (int c);//将参数传进去的小写字母转大写

细讲strlen函数

之前我们了解过strlen函数,是用来统计字符个数的

现在我们来细讲一下

strlen函数的形式

size_t strlen(const char *str);

就是说返回值是size_t,如果我们想储存他的结果,就是需要size_t类型的变量来储存值得注意的是size_t是无符号的,就是没有正负之分

我们来模拟一下strlen函数,更好的理解他

#include <stdio.h>
size_t m_strlen(char *p)
{size_t con = 0;while (*p){p++;con++;}return con;}
int main()
{char arr[6] = "abcde";size_t a = m_strlen(arr);printf("%zd", a);return 0;
}

strcpy

strcpy就是将源字符串中的代码拷贝到目标字符串

char * strcpy(char *p,const char * pp);

其中,p是目标字符串,pp是源字符串

运行过程是:strcpy将目标字符串与原字符串一一替换,直到替换到源字符串的/0部分
前提条件是目标函数的容量一定要足够大,起码要放的下源字符串

那就模拟一下strcpy函数

#include<stdio.h>
void m_strcpy(char* p, char* pp)
{while (*p = *pp){*p++;*pp++;if (*pp == '\0'){//for循环一个字符打印后面的字符break;}}}
int main()
{char arr1[] = "abcdef";char arr2[] = "efg";m_strcpy(arr1, arr2);printf("%s", arr1);return 0;
}

strcat

strcat函数的用法是:将源函数追加到目标函数后面。细节如下:

  • 源字符串必须以\0结尾,因为追加的时候目标函数的\0会被取代,如果没有则追加后的函数将没有\0
  • 目标字符也必须有\0,因为如果没有就不知道从哪里追加
  • 目标函数的空间必须足够大,不然会溢出

那我们就再模拟一下strcat函数:

#include<stdio.h>
void m_strcat(char* a, char* b)
{char** p = b;while (*a != '\0'){a++;}while (*b != '\0'){*a = *b;a++;b++;}*++a = *++b;
}
int main()
{char arr1[10] = "abcd";char arr2[] = "aaa";m_strcat(arr1, arr2);printf("%s\n", arr1);return 0;
}

strcmp

strcmp就是将两个字符串中的每个字符进行比较

  • 如果第一个字符串大于第二个字符串,则返回大于零的数字
  • 第一个字符串等于第二个字符串,则返回零
  • 第一个字符串小于第二个字符串,则返回小于零的数字

而判断两个字符串的大小是相同位置的ASCII码值,将两个字符串同位置的字符一个一个的比较,直到比较出不相同的一个字符,如果都相同,那么返回0

strn系列

其实字符函数还有strncpy,strncat,strncmp,他们与前面说的strcpy,strcat,strcmp都有一点的不同,那么不同的点是什么呢?
那就是在传参时,后面要多加一个size_t num

  • strncpy:char * strncpy ( char * destination, const char * source, size_t num );
  • strncat :char * strncat ( char * destination, const char * source, size_t num );
  • strncmp:int strncmp ( const char * str1, const char * str2, size_t num );

后面的size_t num的意思都是,最多操作多少个字符

假如说strncpy的后面传参的num是3,意思是只3拷贝3个字符,其他的函数的意思也基本一致。

strtok函数

strtok函数起摘取作用,就是将一个字符串中用特定字符串分割的函数将分割的部分都摘取出来
strtok的表现形式

char * strtok ( char * str, const char * sep);

实参sep指向了一个字符串,定义了分割字符的集合


今天的知识讲解完啦,如果觉得有用可以点一下赞和关注,也可以先收藏以防需要时找不到哦,当然如果作者写的哪里有问题欢迎指出,我们一起进步!!!
祝看到这里的人天天开心哦(笔芯)

相关文章:

《重生到现代之从零开始的C语言生活》—— 字符函数和字符串函数

字符函数和字符串函数 字符分类函数 大家知道字符是分为很多种类型的 就比如说’a’ ‘1’ A’等等&#xff0c;所以我们需要一种函数来完成字符函数的分类 这就是字符分类函数 函数需要包含头文件<ctype.h> 函数的运行规则是&#xff1a;如果符合下列参数就返回真 …...

双指针:滑动窗口

题目描述 给定两个字符串 S 和 T&#xff0c;求 S 中包含 T 所有字符的最短连续子字符串的长度&#xff0c;同时要求时间复杂度不得超过 O(n)。 输入输出样例 输入是两个字符串 S 和 T&#xff0c;输出是一个 S 字符串的子串。样例如下&#xff1a; 在这个样例中&#xff0c…...

云原生(四十八) | Nginx软件安装部署

文章目录 Nginx软件安装部署 一、Nginx软件部署步骤 二、安装与配置Nginx Nginx软件安装部署 一、Nginx软件部署步骤 第一步&#xff1a;安装 Nginx 软件 第二步&#xff1a;把 Nginx 服务添加到开机启动项 第三步&#xff1a;配置 Nginx 第四步&#xff1a;启动Nginx …...

【WPF开发】如何设置窗口背景颜色以及背景图片

在WPF中&#xff0c;可以通过设置窗口的 Background 属性来改变窗口的背景。以下是一些设置窗口背景的不同方法&#xff1a; 一、设置纯色背景 1、可以使用 SolidColorBrush 来设置窗口的背景为单一颜色。 <Window x:Class"YourNamespace.MainWindow"xmlns&quo…...

USB 3.0?USB 3.1?USB 3.2?怎么区分?

还记得小白刚接触电脑的时候&#xff0c;电脑普及的USB接口大部分是USB 2.0&#xff0c;还有少部分USB 1.0的&#xff08;现在基本上找不到了&#xff09;。 当时的电脑显示器&#xff0c;可能00后的小伙伴都没见过&#xff0c;它们大概长这样&#xff1a; 当时小白以为电脑最…...

Gitlab实战教程:打造企业级代码托管与协作平台!

目录 一、Gitlab概述1、Gitlab简介&#xff08;1&#xff09;Gitlab的定义&#xff08;2&#xff09;Gitlab与Git的关系&#xff08;3&#xff09;Gitlab的主要功能 2、Gitlab与Git的关系&#xff08;1&#xff09;Git的基本概念&#xff08;2&#xff09;Gitlab与Git的关联&am…...

更新C语言题目

1.以下程序输出结果是() int main() {int a 1, b 2, c 2, t;while (a < b < c) {t a;a b;b t;c--;}printf("%d %d %d", a, b, c); } 解析:a1 b2 c2 a<b 成立 ,等于一个真值1 1<2 执行循环体 t被赋值为1 a被赋值2 b赋值1 c-- c变成1 a<b 不成立…...

struct和C++的类

1.铺垫 1.1想看明白这章节&#xff0c;必须要懂得C语言的struct结构体、C语言深度解剖的static用法、理解声明与定义&#xff0c;C的类和static用法&#xff1b;否则看起来有些吃力 2.引子 2.1struct结构体里面只能存储内置类型&#xff1b;比如&#xff1a;char、short、 i…...

【数据结构与算法】LeetCode:图论

文章目录 LeetCode&#xff1a;图论岛屿数量&#xff08;Hot 100&#xff09;岛屿的最大面积腐烂的橘子&#xff08;Hot 100&#xff09;课程表&#xff08;Hot 100&#xff09; LeetCode&#xff1a;图论 岛屿数量&#xff08;Hot 100&#xff09; 岛屿数量 DFS: class So…...

YOLOv8 基于NCNN的安卓部署

YOLOv8 NCNN安卓部署 前两节我们依次介绍了基于YOLOv8的剪枝和蒸馏 本节将上一节得到的蒸馏模型导出NCNN&#xff0c;并部署到安卓。 NCNN 导出 YOLOv8项目中提供了NCNN导出的接口&#xff0c;但是这个模型放到ncnn-android-yolov8项目中你会发现更换模型后app会闪退。原因…...

【Python|接口自动化测试】使用requests发送http请求时添加headers

文章目录 1.前言2.HTTP请求头的作用3.在不添加headers时4.反爬虫是什么&#xff1f;5.在请求时添加headers 1.前言 本篇文章主要讲解如何使用requests请求时添加headers&#xff0c;为什么要加headers呢&#xff1f;是因为有些接口不添加headers时&#xff0c;请求会失败。 2…...

需求管理工具Jama Connect:与Jira/Slack/GitHub无缝集成,一站式解决复杂产品开发中的协作难题

在产品和软件开发的动态世界中&#xff0c;有效协作是成功的关键。然而&#xff0c;团队往往面临着阻碍进步和创新的重大挑战。了解这些挑战并找到强有力的解决方案&#xff0c;对于实现无缝、高效的团队协作至关重要。Jama Connect就是这样一种解决方案&#xff0c;它是一个功…...

CSP-J/S 复赛算法 背包DP

文章目录 前言背包DP的简介问题描述目标解决方法1. **定义状态**2. **状态转移方程**3. **初始化**4. **目标**举个例子动态规划解决背包问题的核心 DP背包问题示例代码问题描述代码实现核心代码讲解&#xff1a;举例&#xff1a;总结&#xff1a; 总结 前言 背包问题是算法竞…...

如何评估和部署 IT 运维系统?

如何才能将如此新兴、流行的技术转化为企业中实用的系统环境呢&#xff1f; 为此&#xff0c;我们采访了一家已经成功部署IT运维体系的大型企业的IT总监龙先生&#xff0c;请他给我们讲一下企业应该如何真正评估和部署自己的IT运维体系。 真理就是价值。 1.评估选择&#xf…...

正态分布的极大似然估计一个示例,详细展开的方程求解步骤

此示例是 什么是极大似然估计 中的一个例子&#xff0c;本文的目的是给出更加详细的方程求解步骤&#xff0c;便于数学基础不好的同学理解。 目标 假设我们有一组样本数据 x 1 , x 2 , … , x n x_1, x_2, \dots, x_n x1​,x2​,…,xn​&#xff0c;它们来自一个正态分布 N…...

s7-200SMART编程软件下载

1、官网&#xff1a; STEP 7 Micro/WIN SMART V2.2 完整版http://w2.siemens.com.cn/download/smart/STEP%207%20MicroWIN%20SMART%20V2.2.zip STEP 7 Micro/WIN SMART V2.3 完整版http://w2.siemens.com.cn/download/smart/STEP%207%20MicroWIN%20SMART%20V2.3.iso STEP 7 Mi…...

Linux驱动开发常用调试方法汇总

引言&#xff1a;在 Linux 驱动开发中&#xff0c;调试是一个至关重要的环节。开发者需要了解多种调试方法&#xff0c;以便能够快速定位和解决问题。 1.利用printk 描述&#xff1a; printk 是 Linux 内核中的一个调试输出函数&#xff0c;类似于用户空间中的 printf。它用于…...

将列表中的各字符串sn连接成为一个字符串s使用;将各sn间隔开os.pathsep.join()

【小白从小学Python、C、Java】 【考研初试复试毕业设计】 【Python基础AI数据分析】 将列表中的各字符串sn 连接成为一个字符串s 使用;将各sn间隔开 os.pathsep.join() [太阳]选择题 下列说法中正确的是? import os paths ["/a", "/b/c", "/d&q…...

算法题总结(八)——字符串

531、反转字符串二 给定一个字符串 s 和一个整数 k&#xff0c;从字符串开头算起&#xff0c;每计数至 2k 个字符&#xff0c;就反转这 2k 字符中的前 k 个字符。 如果剩余字符少于 k 个&#xff0c;则将剩余字符全部反转。如果剩余字符小于 2k 但大于或等于 k 个&#xff0c…...

大数据开发--1.2 Linux介绍及虚拟机网络配置

目录 一. 计算机入门知识介绍 软件和硬件的概述 硬件 软件 操作系统概述 简单介绍 常见的系统操作 学习Linux系统 二. Linux系统介绍 简单介绍 发行版介绍 常用的发行版 三. Linux系统的安装和体验 Linux系统的安装 介绍 虚拟机原理 常见的虚拟机软件 体验Li…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

汽车生产虚拟实训中的技能提升与生产优化​

在制造业蓬勃发展的大背景下&#xff0c;虚拟教学实训宛如一颗璀璨的新星&#xff0c;正发挥着不可或缺且日益凸显的关键作用&#xff0c;源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例&#xff0c;汽车生产线上各类…...

Python如何给视频添加音频和字幕

在Python中&#xff0c;给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加&#xff0c;包括必要的代码示例和详细解释。 环境准备 在开始之前&#xff0c;需要安装以下Python库&#xff1a;…...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

企业如何增强终端安全?

在数字化转型加速的今天&#xff0c;企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机&#xff0c;到工厂里的物联网设备、智能传感器&#xff0c;这些终端构成了企业与外部世界连接的 “神经末梢”。然而&#xff0c;随着远程办公的常态化和设备接入的爆炸式…...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)

引言 在人工智能飞速发展的今天&#xff0c;大语言模型&#xff08;Large Language Models, LLMs&#xff09;已成为技术领域的焦点。从智能写作到代码生成&#xff0c;LLM 的应用场景不断扩展&#xff0c;深刻改变了我们的工作和生活方式。然而&#xff0c;理解这些模型的内部…...

全面解析数据库:从基础概念到前沿应用​

在数字化时代&#xff0c;数据已成为企业和社会发展的核心资产&#xff0c;而数据库作为存储、管理和处理数据的关键工具&#xff0c;在各个领域发挥着举足轻重的作用。从电商平台的商品信息管理&#xff0c;到社交网络的用户数据存储&#xff0c;再到金融行业的交易记录处理&a…...

ZYNQ学习记录FPGA(一)ZYNQ简介

一、知识准备 1.一些术语,缩写和概念&#xff1a; 1&#xff09;ZYNQ全称&#xff1a;ZYNQ7000 All Pgrammable SoC 2&#xff09;SoC:system on chips(片上系统)&#xff0c;对比集成电路的SoB&#xff08;system on board&#xff09; 3&#xff09;ARM&#xff1a;处理器…...

es6+和css3新增的特性有哪些

一&#xff1a;ECMAScript 新特性&#xff08;ES6&#xff09; ES6 (2015) - 革命性更新 1&#xff0c;记住的方法&#xff0c;从一个方法里面用到了哪些技术 1&#xff0c;let /const块级作用域声明2&#xff0c;**默认参数**&#xff1a;函数参数可以设置默认值。3&#x…...