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://xiahunao.cn/news/2807698.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

数字化转型导师坚鹏:数据安全法解读与政府数字化转型

网络安全法、数据安全法、个人信息保护法解读与政府数字化转型 课程背景&#xff1a; 很多机构存在以下问题&#xff1a; 不清楚网络安全法、数据安全法、个人信息保护法立法背景&#xff1f; 不知道如何理解网络安全法、数据安全法、个人信息保护法政策&#xff1f; 不…

解决easyExcel模板填充时转义字符\{xxx\}失效

正常我们在使用easyExcel进行模板填充时&#xff0c;定义的变量会填充好对应的实际数据&#xff0c;未定义的变量会被清空&#xff0c;但是如果这个未定义的变量其实是模板的一部分&#xff0c;那么清空了就出错了。 在这张图里&#xff0c;上面的是模板填充后导出的文件&…

1906_ AMBA_高级MCU总线架构

1906_ AMBA_高级MCU总线架构 全部学习汇总&#xff1a; g_arm_cores: ARM内核的学习笔记 (gitee.com) 在看内核相关的文件的时候看到了AMBA这个缩写&#xff0c;查了一下具体的概念。这个其实是一个总线架构&#xff0c;应该是ARM设计的。我找到了相关的介绍网页&#xff1a; A…

[嵌入式系统-33]:RT-Thread -18- 新手指南:三种不同的版本、三阶段学习路径

目录 前言&#xff1a;学习路径&#xff1a;入门学习-》进阶段学习》应用开发 一、RT-Thread版本 1.1 标准版 1.2 Nano 1.3 Smart版本 1.4 初学者制定学习路线 1.5 RT-Thread在线文档中心目录结构 1.6 学习和使用RT-Thread的三种场景 二、入门学习阶段&#xff1a;内…

【爬虫逆向实战篇】定位加密参数、断点调试与JS代码分析

文章目录 1. 写在前面2. 确认加密参数3. 加密参数定位4. XHR断点调试 【作者主页】&#xff1a;吴秋霖 【作者介绍】&#xff1a;Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作&#xff01; 【作者推荐】&#xff1a;对JS逆向…

C++基础学习——哈希表的封装

目录 ​编辑 一&#xff0c;实现一个可封装的哈希表 1&#xff0c;哈希表的节点 2&#xff0c;哈希表的成员 3&#xff0c;哈希表成员方法的实现 4&#xff0c;迭代器的实现 5&#xff0c;在哈希表中加入迭代器 二&#xff0c;封装哈希表 1&#xff0c;unorder_map封装 2…

win10安装使用AxurePR9

背景&#xff1a;win10 安装、汉化 Axure Pr9 下载 安装包 链接&#xff1a;https://pan.baidu.com/s/1taMgh2zLbaFK7VTfUXTHdQ 提取码&#xff1a;kygo 安装 修改安装目录 打开是英文的 汉化 复制lang包到Axure安装包 再打开就是中文 问题 发布html后火狐无法打开 一、…

抖音数据挖掘软件|视频内容提取

针对用户获取抖音视频的需求&#xff0c;我们开发了一款功能强大的工具&#xff0c;旨在解决用户在获取抖音视频时需要逐个复制链接、下载的繁琐问题。我们希望用户能够通过简单的关键词搜索&#xff0c;实现自动批量抓取视频&#xff0c;并根据需要进行选择性批量下载。因此&a…

实现外网手机或者电脑随时随地远程访问家里的电脑主机(linux为例)

文章目录 一、背景概要二、安装配置花生壳软件(linux版本)三、手机端(外网)验证连接四、安装ubuntu20server版系统遇到的问题记录 一、背景概要 由于经常在遇到某些问题的时候&#xff0c;针对某一个场景的理解&#xff0c;需要借助于自己的电脑去编译(aosp/linux/qemu)代码查…

PHP语言检测用户输入密码及调用Python脚本

现在有一份计算流体力学N-S方程的Python脚本&#xff0c;想要在用户登录网站后可以可以运行该脚本&#xff0c;然后将脚本运行后绘制的图片显示在用户网页上。 建一个名为N_S.py的python脚本文件&#xff0c;这个脚本在生成图像后会自行关闭&#xff0c;随后将图片保存在指定的…

SpringMVC 学习(三)之 @RequestMapping 注解

目录 1 RequestMapping 注解介绍 2 RequestMapping 注解的位置 3 RequestMapping 注解的 value 属性 4 RequestMapping 注解的 method 属性 5 RequestMapping 注解的 params 属性&#xff08;了解&#xff09; 6 RequestMapping 注解的 headers 属性&#xff08;了解&…

【Android】坐标系

Android 系统中有两种坐标系&#xff0c;分别为 Android 坐标系和 View 坐标系。了解这两种坐标系能够帮助我们实现 View 的各种操作&#xff0c;比如我们要实现 View 的滑动&#xff0c;你连这个 View 的位置都不知道&#xff0c;那如何去操作呢&#xff1f; 一、Android 坐标…

【Flink精讲】Flink 内存管理

面临的问题 目前&#xff0c; 大数据计算引擎主要用 Java 或是基于 JVM 的编程语言实现的&#xff0c;例如 Apache Hadoop、 Apache Spark、 Apache Drill、 Apache Flink 等。 Java 语言的好处在于程序员不需要太关注底层内存资源的管理&#xff0c;但同样会面临一个问题&…

【接口加密】接口加密的未来发展与应用场景

目录 3.1 接口加密与区块链技术的结合 3.1.1 区块链技术的安全特性与优势 3.1.2 接口加密在区块链中的应用案例 3.2 接口加密与物联网安全 3.2.1 物联网安全的挑战与需求 3.2.2 接口加密在物联网领域的实际应用 3.3 接口加密在金融与电子商务领域的应用 随着信息技术的不…

Java中的常量与变量:初探Java世界的基石

✨✨ 所属专栏&#xff1a; Java基石&#xff1a;深入探索Java核心基础✨✨ &#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; 目录 引言 一. 常量与变量的概念 常量 变量 总结 二. 常量的分类 1. 字面常量 2. 常量变量 3. 枚举常量…

8 buuctf解题

[BJDCTF2020]just_a_rar 1 下载&#xff0c;得到 发现有加密 使用ARCHPR设置四位数掩码爆破 得到口令2016&#xff0c;解压得到图片&#xff0c;flag在图片exif中 在备注里面看见了flag [HBNIS2018]excel破解 1 下载下来是attachment.xls 修改后缀为rar 使用010 Editor打开&a…

力扣技巧题:丢失的数字

先排后找可以让结果更简单 int cmp(const void* a, const void* b){return *(int*)a - *(int*)b; } int missingNumber(int* nums, int numsSize){qsort(nums, numsSize, 4, cmp);for(int i0; i<numsSize; i){if(nums[i] i){continue;}else{return i;}}return numsSize; }…

RandAugment(NeurIPS 2020)论文速读

paper&#xff1a;RandAugment: Practical automated data augmentation with a reduced search space third-party implementation&#xff1a;https://github.com/open-mmlab/mmpretrain/blob/main/mmpretrain/datasets/transforms/auto_augment.py 存在的问题 自动增强策…

k8s学习笔记-基础概念

&#xff08;作者&#xff1a;陈玓玏&#xff09; deployment特别的地方在于replica和selector&#xff0c;docker根据镜像起容器&#xff0c;pod控制容器&#xff0c;job、cronjob、deployment控制pod&#xff0c;job做离线任务&#xff0c;pod大多一次性的&#xff0c;cronj…

React 模态框的设计(一)拖动组件的设计

春节终结束了&#xff0c;忙得我头疼。终于有时间弄自己的东西了。今天来写一个关于拖动的实例讲解。先看效果&#xff1a; 这是一个简单的组件设计&#xff0c;如果用原生的js设计就很简单&#xff0c;但在React中有些事件必须要多考虑一些。这是一个系列的文章&#xff0c;…