c语言字符函数和字符串函数

目录

  • 1. 字符分类函数
  • 2. 字符转换函数
  • 3. strlen的使用和模拟实现
  • 4. strcpy的使用和模拟实现
  • 5. strcat的使用和模拟实现
  • 6. strcmp的使用和模拟实现
  • 7. strncpy函数的使用
  • 8. strncat函数的使用
  • 9. strncmp函数的使用
  • 10. strstr的使用和模拟实现
  • 11. strtok函数的使用
  • 12. strerror函数的使用

1. 字符分类函数

字符分类函数是用来判断一个字符的类型的函数。在C语言中,有一组标准的字符分类函数可以使用,包括:

  • isalnum: 判断字符是否为字母或数字
    • isalnum()是一个字符串方法,用于检查字符串是否只包含字母和数字。如果字符串只包含字母和数字,则返回True(非0),否则返回False(0)(以下函数同理)。
  • isalpha: 判断字符是否为字母
  • isdigit: 判断字符是否为数字
  • islower: 判断字符是否为小写字母
  • isupper: 判断字符是否为大写字母
  • isspace: 判断字符是否为空白字符(如空格、制表符等)

以下是使用isalnum()方法的示例代码(其他字符分类函数代码同理):

#include <stdio.h>
#include <ctype.h>

int main() 
{
    char ch = 'A';

    if (isalpha(ch)) 
    {
        printf("%c 是一个字母\n", ch);
    } 
    else 
    {
        printf("%c 不是一个字母\n", ch);
    }
    
    return 0;
}
 
  • 输出结果
A 是一个字母

2. 字符转换函数

字符转换函数用来在不同字符类型之间进行转换。常用的字符转换函数有:

  • tolower: 将大写字母转换为小写字母
  • toupper: 将小写字母转换为大写字母
    • 在C语言中,tolower函数用于将大写字母转换为小写字母。它接受一个字符作为参数,并返回转换后的结果。

以下是一个示例代码,演示如何使用tolower函数(toupper同理):

#include <stdio.h>
#include <ctype.h>

int main() 
{
    char ch = 'A';
    char lowerCh;

    lowerCh = tolower(ch);

    printf("转换前的字符为: %c\n", ch);
    printf("转换后的字符为: %c\n", lowerCh);

    return 0;
}

输出结果为:

转换前的字符为: A
转换后的字符为: a

在上面的例子中,我们将字符A传递给tolower函数,它将其转换为小写字母a并将结果赋值给lowerCh。然后,我们使用printf函数分别打印原始字符和转换后的字符。

请注意在使用tolowertoupper函数之前,必须包含头文件<ctype.h>


这些函数只对字母字符有效,对其他字符不做修改。

3. strlen的使用和模拟实现

strlen函数用来计算一个字符串的长度,即字符串中字符的个数(不包括结尾的空字符’\0’)。在C语言中,可以使用strlen函数直接获取字符串的长度,例如:

char str[] = "Hello";
int len = strlen(str);
printf("%d",len);
  • 输出结果
    在这里插入图片描述

strlen的模拟实现可以通过循环计算字符个数来实现:

size_t strlen(const char* str) 
{
    size_t len = 0;
    while (str[len] != '\0') 
    {
        len++;
    }
    return len;
}

4. strcpy的使用和模拟实现

strcpy函数用来将一个字符串复制到另一个字符串中。在C语言中,可以使用strcpy函数直接进行字符串复制,例如:

char source[] = "Hello";
char destination[10];
strcpy(destination, source);
printf("%s", destination);
  • 输出结果
    在这里插入图片描述

strcpy的模拟实现可以通过循环逐个字符复制来实现:

char* strcpy(char* destination, const char* source) 
{
    char* dest = destination;
    while ((*dest++ = *source++) != '\0') 
    {
        // 拷贝字符直到遇到结尾的空字符
    }
    return destination;
}

5. strcat的使用和模拟实现

strcat函数用来将一个字符串追加到另一个字符串的末尾。在C语言中,可以使用strcat函数直接进行字符串追加,例如:

char str1[15] = "Hello";
char str2[] = " World";
strcat(str1, str2);
printf("%s",str1);
  • 输出结果
    在这里插入图片描述

strcat的模拟实现可以通过先找到第一个字符串的结尾位置,然后逐个字符追加来实现:

char* strcat(char* destination, const char* source) 
{
    char* dest = destination;
    while (*dest != '\0') 
    {
        dest++;
    }
    while ((*dest++ = *source++) != '\0') 
    {
        // 追加字符直到遇到结尾的空字符
    }
    return destination;
}

6. strcmp的使用和模拟实现

strcmp函数用来比较两个字符串的大小关系。在C语言中,可以使用strcmp函数直接进行字符串比较,例如:

char str1[] = "abc";
char str2[] = "def";
int result = strcmp(str1, str2);

if (result)
	printf("相等");
else
	printf("不相等");
  • 输出结果
    在这里插入图片描述

strcmp的返回值为整数,如果两个字符串相等,则返回0;如果第一个字符串小于第二个字符串,则返回负数;如果第一个字符串大于第二个字符串,则返回正数。

strncmp函数的比较规则如下:

  1. 首先比较两个字符串的第一个字符,如果不相等,则返回它们之间的ASCII码差值(str1[i] - str2[i]),这个差值可以是正数、负数或零。
  2. 如果第一个字符相等,则继续比较下一个字符,重复上述步骤,直到比较完n个字符或者遇到不相等的字符。
  3. 如果比较完n个字符后,两个字符串完全相等,则返回0。
  4. 如果比较完n个字符后,两个字符串不相等,则返回第一个不相等字符的ASCII码差值(str1[i] - str2[i])。

注意,如果某个字符串的长度小于n,则只比较到该字符串的末尾字符为止。另外,strncmp函数对于含有’\0’(空字符)的字符串也会进行比较,不会提前终止。

strcmp的模拟实现可以通过逐个字符比较来实现:

int strcmp(const char* str1, const char* str2) 
{
    while (*str1 && (*str1 == *str2)) 
    {
        str1++;
        str2++;
    }
    return *(unsigned char*)str1 - *(unsigned char*)str2;
}

7. strncpy函数的使用

strncpy函数用来复制指定长度的部分字符串到目标字符串中。在C语言中,可以使用strncpy函数直接进行字符串复制,例如:

char source[] = "Hello World";
char destination[10];
strncpy(destination, source, 5);
printf("%s",destination);

这个例子中,将source中的前5个字符(“Hello”)复制到destination中。

  • 输出结果
    在这里插入图片描述
    因为没有’\0’,所以后面输出的是随机值。

8. strncat函数的使用

strncat函数用来将指定长度的部分字符串追加到目标字符串的末尾。在C语言中,可以使用strncat函数直接进行字符串追加,例如:

char str1[15] = "Hello";
char str2[] = " World";
strncat(str1, str2, 5);
printf("%s",str1);

这个例子中,将str2中的前5个字符(" World")追加到str1的末尾。

  • 输出结果
    在这里插入图片描述

9. strncmp函数的使用

strncmp函数用来比较两个字符串的前n个字符的大小关系。在C语言中,可以使用strncmp函数直接进行字符串比较,例如:

char str1[] = "abc";
char str2[] = "def";
int result = strncmp(str1, str2, 2);
if (result < 0) 
{
    printf("str1 is less than str2\n");
}
else if (result > 0) 
{
    printf("str1 is greater than str2\n");
}
else 
{
    printf("str1 is equal to str2\n");
}

这个例子中,只比较str1str2的前两个字符(“ab"和"de”),结果为负数。

  • 输出结果
    在这里插入图片描述

10. strstr的使用和模拟实现

strstr函数用来在一个字符串中查找另一个字符串第一次出现的位置。在C语言中,可以使用strstr函数直接进行字符串查找,例如:

char str[] = "Hello World";
char* result = strstr(str, "World");
printf("%p",result);

这个例子中,查找"World"在str中第一次出现的位置。

  • 输出结果
    在这里插入图片描述
    strstr的模拟实现可以通过两个循环嵌套来实现:
char* strstr(const char* str, const char* substr) 
{
    while (*str) 
    {
        const char* s1 = str;
        const char* s2 = substr;
        while (*s1 && *s2 && (*s1 == *s2)) 
        {
            s1++;
            s2++;
        }
        if (!*s2) 
        {
            return str;
        }
        str++;
    }
    return NULL;
}

11. strtok函数的使用

strtok函数用来将一个字符串分割成多个子字符串。在C语言中,可以使用strtok函数直接进行字符串分割,例如:

char str[] = "Hello,World,!";
char* token = strtok(str, ",");
while (token != NULL) 
{
    printf("%s\n", token);
    token = strtok(NULL, ",");
}

这个例子中,将str按逗号进行分割,输出三个子字符串(“Hello”,“World”,“!”)。

  • 输出结果
    在这里插入图片描述

12. strerror函数的使用

strerror函数用来将错误码转换成对应的错误信息字符串。在C语言中,可以使用strerror函数直接进行错误信息转换,例如:

#include <stdio.h>
#include <errno.h>
#include <string.h>

int main() 
{
    FILE* file = fopen("nonexistent.txt", "r");
    if (file == NULL) 
    {
        printf("Error: %s\n", strerror(errno));
    }
    return 0;
}

这个例子中,尝试打开一个不存在的文件,然后使用strerror函数将错误码转换成对应的错误信息字符串。

  • 输出结果
    在这里插入图片描述

在使用字符串函数时需要加上头文件 <string.h>

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【kubernetes】二进制部署k8s集群之master节点和etcd数据库集群(上)

目录 前言&#xff1a;关于整个k8s集群的主机规划以及本文部署架构 步骤一&#xff1a;完成操作系统初始化配置 步骤二&#xff1a;完成etcd集群部署 关于etcd集群 ①准备签发证书环境 ②先完成单独一个节点的部署 ③通过部署好的etcd01节点 完成另外两个节点的部署 拓展…

大数据之Flink优化

文章目录 导言&#xff1a;Flink调优概览第1章 资源配置调优1.1 内存设置1.1.1 TaskManager 内存模型1.1.2 生产资源配置示例 1.2 合理利用 cpu 资源1.2.1 使用 DefaultResourceCalculator 策略1.2.2 使用 DominantResourceCalculator 策略1.2.3 使用DominantResourceCalculato…

《隐私计算简易速速上手小册》第8章:隐私计算对机器学习和 AI 的影响(2024 最新版)

文章目录 8.1 机器学习中的隐私问题8.1.1 基础知识8.1.2 主要案例:使用差分隐私的机器学习8.1.3 拓展案例 1:基于隐私的数据聚合8.1.4 拓展案例 2:保护隐私的推荐系统8.2 使用隐私计算加强 AI 安全8.2.1 基础知识8.2.2 主要案例:使用同态加密的数据分析8.2.3 拓展案例 1:安…

什么是调制比

一般情况下&#xff0c;调制波和载波的最大幅值是不一样的。 正弦波的最大幅值低于三角波的最大幅值。 这样做的目的就是产生最大占空比&#xff08;2000W逆变器中最大占空比是80%&#xff09; 调制波就是正弦波的最大幅值比三角载波的最大幅值 问题1 为什么调制波要小于1&…

pdffactory pro 8中文破解版

详细介绍 PdfFactory&#xff0c;PDF文档虚拟打印机&#xff0c;无须Acrobat即可创建Adobe PDF文件&#xff0c;创建PDF文件的方法比其他方法更方便和高效。支持将多个文档整合到一个PDF文件、增加字体和便签、PDF加密、去水印、压缩优化。 FinePrint&#xff0c;Windows虚拟…

SpringBoot 3 新特性

目录 1. GraalVM2. 支持虚拟线程3. HTTP Interface 1. GraalVM 使用GraalVM将SpringBoot应用程序编译成本地可执行的镜像文件&#xff0c;可以显著提升启动速度、峰值性能以及减少内存应用。传统的应用都是编译成字节码&#xff0c;然后通过JVM解释并最终编译成机器码来运行&a…

2.23作业

1.自己实现单向循环链表的功能 //loop_list.c#include"loop_list.h" //创建单向循环链表 loop_p create_head() {loop_p H(loop_p)malloc(sizeof(loop_list));if(HNULL){printf("空间申请失败\n");return NULL;}H->len0;H->nextH;return H; }//创建…

【前端素材】推荐优质后台管理系统Follow平台模板(附源码)

一、需求分析 当我们从多个层次来详细分析后台管理系统时&#xff0c;可以将其功能和定义进一步细分&#xff0c;以便更好地理解其在不同方面的作用和实际运作。 1. 结构层次 在结构层次上&#xff0c;后台管理系统可以分为以下几个部分&#xff1a; a. 核心功能模块&#…

计算机组成原理

为什么你需要学习计算机组成原理&#xff1f; 计算机底层知识的“第一课” 其实在看完各个大学的计算机课程设计之后。&#xff0c;你会发现&#xff0c;它们都有差不多十来门核心课程。其中&#xff0c;“计算机组成原理”是入门和底层层面的第一课。 虽然计算机系的学生毕业后…

基于自然语言的跨模态行人重识别技术研究

基于自然语言的跨模态行人重识别技术研究万方数据知识服务平台 第二章 跨模态行人重识别理论基础 2.1 文本-图像检索技术 基于文本信息的跨模态行人重识别本质是基于文本-图像两个模态的行人重识别&#xff0c; 由于跨的两个模态分别是文本和图像&#xff0c; 所以其解决思路…

WordPress前端如何使用跟后台一样的Dashicons图标字体?

很多站长都喜欢在站点菜单或其他地方添加一些图标字体&#xff0c;常用的就是添加Font Awesome 图标和阿里巴巴矢量库图标iconfont。其实我们使用的 WordPress 本身就有一套管理员使用的官方图标字体 Dashicons&#xff0c;登录我们站点后台就能看到这些图标字体。那么有没有可…

Linux项目部署

目录 一.安装JDK二.安装Tomcat三.安装MySQL四.部署项目 一.安装JDK 上传jdk安装包 jdk-8u151-linux-x64.tar.gz 进入opt目录&#xff0c;将安装包拖进去 2. 解压安装包 [rootlocalhost opt]# cd /usr/local/ [rootlocalhost local]# mkdir java 再次进入到opt目录解压 [root…

Android14之input高级调试技巧(一百八十八)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

高通XBL阶段读取分区

【需求】&#xff1a; 在某些场景下&#xff0c;需要在XBL阶段读取分区数据&#xff0c;需要验证xbl阶段方案 这里主要以裸分区为例&#xff0c;比如oem分区。 1、创建一个1MB大小的oem.img&#xff0c;写入内容“test oem partition” 创建方式&#xff1a; dd if/dev/null …

FPGA之16:1复选器

每个slice 都有一个F8MUX。F8MUX原语&#xff1a; MUXF8 MUXF8_inst&#xff08; .0&#xff08;0&#xff09;&#xff0c;Il Output of MUX to general routing .I0&#xff08;10&#xff09;&#xff0c;//Input&#xff08;tie to MUXF7L/LO out&#xff09; .I1&#xf…

nginx重新编译添加模块或去除不需要的模块

在使用nginx中&#xff0c;我们可能需要对已经安装的nginx进行添加或者删除模块 1、先查看nginx安装了哪一些模块 nginx -V2、来到nginx源码目录&#xff0c;根据如下规则&#xff0c;自行根据需求更改命令 如果要去掉nginx自带的模块&#xff0c;就是用–without做为前缀进…

python3 Flask jwt 简易token认证实例

直接上代码 from flask import Flask, jsonify, request, make_response import jwt import datetime from functools import wrapsapp Flask(__name__)# 这是一个示例密钥&#xff0c;实际应用中应该使用一个复杂且随机的密钥 app.config[SECRET_KEY] your_secret_keydef t…

手写redux和applyMiddleware中间件react示例

目录 一 核心代码 1.reducer 2.store.js 二 关于context API的使用 1. MyContext 2. createContext 3. ContextProvider 4. connect 三 组件验证效果 1. Todo 2. TodoList 3.TodoItem 4.TodoInput 5. App组件引入Todo组件 一 核心代码 1.reducer // 新增列表数…

LDR6020芯片驱动未来:TYPE-C桌面显示器的新篇章

TYPE-C接口桌面显示器&#xff0c;与传统显示器截然不同。它不仅在视频传输方面表现出色&#xff0c;还融入了创新的充电功能。利用显示器的DC电源&#xff0c;可以轻松转换成PD协议&#xff0c;为笔记本、任天堂等HOST设备提供稳定的充电服务。 兼容性&#xff1a;连接无忧 …

解决SpringAMQP工作队列模型程序报错:WARN 48068:Failed to declare queue: simple.queue

这里写目录标题 1.运行环境2.报错信息3.解决方案4.查看解决之后的效果 1.运行环境 使用docker运行了RabbitMQ的服务器&#xff1a; 在idea中导入springAMQP的jar包&#xff0c;分别编写了子模块生产者publisher&#xff0c;消费者consumer&#xff1a; 1.在publisher中运行测试…