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("相等");
elseprintf("不相等");
  • 输出结果
    在这里插入图片描述

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>

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

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

相关文章

设计模式-创建型模式-建造者模式

建造者模式&#xff08;Builder Pattern&#xff09;&#xff1a;将一个复杂对象的构建与它的表示分离&#xff0c;使得同样的构建过程可以创建不同的表示。建造者模式是一种对象创建型模式。 建造者模式一步一步地创建一个复杂的对象&#xff0c;它允许用户只通过指定复杂对象…

Linux-基础知识(黑马学习笔记)

硬件和软件 我们所熟知的计算机是由&#xff1a;硬件和软件组成。 硬件&#xff1a;计算机系统中电子&#xff0c;机械和光电元件等组成的各种物理装置的总称。 软件&#xff1a;是用户和计算机硬件之间的接口和桥梁&#xff0c;用户通过软件与计算机进行交流。 而操作系统…

gensim 实现 TF-IDF

目录 介绍 代码 介绍 TF-IDF&#xff08;Term Frequency-Inverse Document Frequency&#xff09; 含义&#xff1a; TF (Term Frequency): 词频&#xff0c;是指一个词语在当前文档中出现的次数。它衡量的是词语在文档内部的重要性&#xff0c;直观上讲&#xff0c;一个词…

【机器学习科学库】全md文档笔记:Jupyter Notebook和Matplotlib使用(已分享,附代码)

本系列文章md笔记&#xff08;已分享&#xff09;主要讨论人工智能相关知识。主要内容包括&#xff0c;了解机器学习定义以及应用场景&#xff0c;掌握机器学习基础环境的安装和使用&#xff0c;掌握利用常用的科学计算库对数据进行展示、分析&#xff0c;学会使用jupyter note…

完美解决ubuntu+windows双系统下时间不正确问题

在同一台电脑上安装ubuntuwindows双系统时&#xff0c;会出现某个系统的时间不正确的问题&#xff0c;而由于windows同步时间实在是太慢了&#xff0c;如果不去解决&#xff0c;windows上的时间大概率一直都是不对的。 原因分析 windows采用LocalTime机制设置时间&#xff0c…

Centos服务器部署前后端项目

目录 准备工作1. 准备传输软件2. 连接服务器 部署Mysql1.下载Mysql(Linux版本)2. 解压3. 修改配置4. 启动服务另一种方法Docker 部署后端1. 在项目根目录中创建Dockerfile文件写入2. 启动 部署前端1. 在项目根目录中创建Dockerfile文件写入2. 启动 准备工作 1. 准备传输软件 …

【C++那些事儿】C++入门 | 命名空间 | 缺省参数 | 引用 | 内联函数 | auto关键字 | 范围for循环 | nullptr

&#x1f4f7; 江池俊&#xff1a; 个人主页 &#x1f525;个人专栏&#xff1a; ✅数据结构冒险记 ✅C那些事儿 &#x1f305; 有航道的人&#xff0c;再渺小也不会迷途。 文章目录 前言1. C关键字(C98)2. 命名空间2.1 命名空间定义2.2 命名空间使用 3. C输入&输出4. 缺…

【C++】构造函数和析构函数详解

个人主页 &#xff1a; zxctscl 文章封面来自&#xff1a;艺术家–贤海林 如有转载请先通知 文章目录 1. 类的6个默认成员函数2. 构造函数2.1 概念2.2 构造函数特性2.2.1 语法特性2.2.2 其他特性 3. 析构函数3.1 概念3.2 特性 4. 构造与析构顺序 1. 类的6个默认成员函数 如果一…

一周学会Django5 Python Web开发-Http请求HttpRequest请求类

锋哥原创的Python Web开发 Django5视频教程&#xff1a; 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计25条视频&#xff0c;包括&#xff1a;2024版 Django5 Python we…

Repeater:创建大量类似项

Repeater 类型用于创建大量类似项。与其它视图类型一样&#xff0c;Repeater有一个model和一个delegate。 首次创建Repeater时&#xff0c;会创建其所有delegate项。若存在大量delegate项&#xff0c;并且并非所有项都必须同时可见&#xff0c;则可能会降低效率。 有2种方式可…

设计模式学习笔记 - 面向对象 - 7.为什么要多用组合少用继承?如何决定该用组合还是继承?

前言 在面向对象编程中&#xff0c;有一条非常经典的设计原则&#xff1a;组合优于继承&#xff0c;多用组合少用继承。 为什么不推荐使用继承&#xff1f; 组合比继承有哪些优势&#xff1f; 如何判断该用组合还是继承&#xff1f; 为什么不推荐使用继承&#xff1f; 继承…

【2024.02.22】定时执行专家 V7.0 发布 - TimingExecutor V7.0 Release - 龙年春节重大更新版本

目录 ▉ 新版本 V7.0 下载地址 ▉ V7.0 新功能 ▼2024-02-21 V7.0 - 更新日志▼ ▉ V7.0 新UI设计 ▉ 新版本 V7.0 下载地址 BoomWorks软件的最新版本-CSDN博客文章浏览阅读10w次&#xff0c;点赞9次&#xff0c;收藏41次。▉定时执行专家—毫秒精度、专业级的定时任务执行…

【LeetCode每日一题】 单调栈的案例84 柱状图中最大的矩形

84 柱状图中最大的矩形 给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#xff0c;且宽度为 1 。 求在该柱状图中&#xff0c;能够勾勒出来的矩形的最大面积。 示例 1: 输入&#xff1a;heights [2,1,5,6,2,3] 输出&#xff1a;10 解释…

神经网络系列---权重初始化方法

文章目录 权重初始化方法Xavier初始化&#xff08;Xavier initialization&#xff09;Kaiming初始化&#xff0c;也称为He初始化LeCun 初始化正态分布与均匀分布Orthogonal InitializationSparse Initializationn_in和n_out代码实现 权重初始化方法 Xavier初始化&#xff08;X…

【SpringCloudAlibaba系列--nacos配置中心】

Nacos做注册中心以及使用docker部署nacos集群的博客在这&#xff1a; 容器化部署Nacos&#xff1a;从环境准备到启动 容器化nacos部署并实现服务发现(gradle) 使用docker部署nacos分布式集群 下面介绍如何使用nacos做配置中心 首先要进行nacos-config的引入&#xff0c;引入…

leetcode单调栈

739. 每日温度 请根据每日 气温 列表&#xff0c;重新生成一个列表。对应位置的输出为&#xff1a;要想观测到更高的气温&#xff0c;至少需要等待的天数。如果气温在这之后都不会升高&#xff0c;请在该位置用 0 来代替。 例如&#xff0c;给定一个列表 temperatures [73, …

Linux:gitlab创建组,创建用户,创建项目

创建组和项目 让后可以在组里创建一个个仓库 创建成员 我创建个成员再把他分配进这个组里 进入管理员 密码等会我们创建完用户再去配置密码 Regular是普通的用户&#xff0c;只可以正常去访问指定规则的项目 而下面的administrator就是管理员&#xff0c;可以随便进项目&…

8-pytorch-损失函数与反向传播

b站小土堆pytorch教程学习笔记 根据loss更新模型参数 1.计算实际输出与目标之间的差距 2.为我们更新输出提供一定的依据&#xff08;反向传播&#xff09; 1 MSEloss import torch from torch.nn import L1Loss from torch import nninputstorch.tensor([1,2,3],dtypetorch.fl…

数据仓库选型建议

1 数仓分层 1.1 数仓分层的意义 **数据复用&#xff0c;减少重复开发&#xff1a;**规范数据分层&#xff0c;开发一些通用的中间层数据&#xff0c;能够减少极大的重复计算。数据的逐层加工原则&#xff0c;下层包含了上层数据加工所需要的全量数据&#xff0c;这样的加工方…

黄仁勋最新专访:机器人基础模型可能即将出现,新一代GPU性能超乎想象

最近&#xff0c;《连线》的记者采访了英伟达CEO黄仁勋。 记者表示&#xff0c;与Jensen Huang交流应该带有警告标签&#xff0c;因为这位Nvidia首席执行官对人工智能的发展方向如此投入&#xff0c;以至于在经过近 90 分钟的热烈交谈后&#xff0c;我&#xff08;指代本采访的…