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

news2024/12/22 19:38:51

目录

  • 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>

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

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

相关文章

阿里云的流量价格表_2024阿里云服务器流量费用表

阿里云服务器宽带按使用流量怎么收费的&#xff1f;价格为0.8元/GB&#xff0c;地域不同流量价格也不同&#xff0c;北京、杭州、上海、深圳等中国大陆地域是0.8元每GB&#xff0c;中国香港是1元/GB&#xff0c;美国流量0.5元1GB、日本流量0.6元、韩国流量0.8元&#xff0c;阿里…

利用Dynamo为家具族三维截图并导入到明细表

前几天我在朋友圈发了一个小视频&#xff0c;是利用Dynamo为家具族截图&#xff0c;并将截图添加到族参数&#xff0c;以便于在图纸中显示族的样子。效果如下&#xff1a; 此处为语雀视频卡片&#xff0c;点击链接查看&#xff1a; 利用Dynamo为家具族三维截图并导入到明细表 …

2.WEB渗透测试-前置基础知识-web基础知识和操作系统

web基础知识 1.http协议 超文本传输协议是互联网上应用最广泛的一种网络协议。所有www文件都必须遵守的一个标准&#xff0c;是以 ASCII 码传输&#xff0c;建立在 TCP/IP 协议之上的应用层规范&#xff0c;通俗点说就是一种固定的通讯规则。 2、网络的三种架构及特点 网络应…

港科夜闻|香港科大计划建立北部都会区卫星校园完善科大创新带,发展未来创新科技 未来医药发展及跨学科教育...

关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1、香港科大计划建立北部都会区卫星校园完善“科大创新带”&#xff0c;发展未来创新科技、未来医药发展及跨学科教育。香港科大校长叶玉如教授在2月22日的媒体会议上表示&#xff0c;香港科大将在北部都会区建立卫星校园&a…

5.2.鸿蒙LiteOS-M los_dispatch

目录 一、cortex-m4 los_dispatch.S代码分析坚持就有收获 一、cortex-m4 los_dispatch.S代码分析 .syntax unified #.syntax [unified | divided], 指定arm 汇编语法规则 .arch armv7e-m #指定平台, 与命令行参数-march同样的作用 .fpu fpv4-sp-d16 #指定浮点运算…

Github 2024-02-21 开源项目日报 Top10

根据Github Trendings的统计&#xff0c;今日(2024-02-21统计)共有10个项目上榜。根据开发语言中项目的数量&#xff0c;汇总情况如下&#xff1a; 开发语言项目数量Python项目8非开发语言项目1TypeScript项目1 gpt4free 语言模型集合改进计划 创建周期&#xff1a;300 天开…

说说设备像素、css像素、设备独立像素、dpr、ppi 之间的区别

文章目录 一、背景二、介绍CSS像素设备像素设备独立像素dprppi 三、总结参考文献 一、背景 在css中我们通常使用px作为单位&#xff0c;在PC浏览器中css的1个像素都是对应着电脑屏幕的1个物理像素 这会造成一种错觉&#xff0c;我们会认为css中的像素就是设备的物理像素 但实…

Matlab/simulink基于vsg的风光储调频系统建模仿真(持续更新)

​ 1.Matlab/simulink基于vsg的风光储调频系统建模仿真&#xff08;持续更新&#xff09;

vue从flask获取数据并显示

记录一个前后端分离遇到的问题&#xff0c;即vue前端从flask后端获取数据。具体描述如下&#xff1a;flask只负责连接数据库并获取数据库的数据&#xff0c;并返回给前端vue&#xff1b;vue则需要获取后端返回的数据并显示。 方法如下&#xff0c;分别用一个vue组件和一个flas…

深入探究node搭建socket服务器

自从上篇中sokect实现了视频通话&#xff0c;但是是使用ws依赖库实现的服务端&#xff0c;所以最近再看ws源码&#xff0c;不看不知道&#xff0c;一看很惊讶。 接下来一点点记录一下&#xff0c;如何搭建一个简易的服务端socket&#xff0c;来实现上次的视频通讯。 搭建一个…

修复Microsoft Edge WebView2无法安装的问题

修复Microsoft Edge WebView2无法安装的问题 场景解决方案 场景 系统&#xff1a;win11 电脑&#xff1a;联想14 前提&#xff1a;使用Geek Uninstaller强制删除了Microsoft Edge WebView2 同时下载了clash verge。 发现根本无法运行&#xff08;点击了无任何反应且图标颜色…

C++面试题精选与解析

C面试题精选与解析 一、基础与语法 请问C中的指针和引用有什么区别&#xff1f; 指针是一个变量&#xff0c;存储的是另一个变量的内存地址。指针可以被重新赋值以指向另一个不同的对象。而引用是某个变量的别名&#xff0c;一旦引用被初始化为一个变量&#xff0c;就不能改变…

第四篇:CamX确认当前选择的usecase、pipeline、sensormode

第四篇:CamX确认当前选择的usecase、pipeline,sensormode 一、 当前UseCase logcat |grep “usecase selected” I/CHIUSECASE( 661): [CONFIG ] chxusecaseutils.cpp:867 GetMatchingUsecase() ZSL usecase selected二、当前pipeline logcat |grep “Selected sensor M…

python_ACM模式《剑指offer刷题》二叉树3

题目&#xff1a; 面试tips&#xff1a; 若面试官无特殊要求直接优先采用思路一递归法&#xff08;易想&#xff09;&#xff1b;若有特殊要求&#xff0c;例如不想要重复遍历中序序列来寻找根节点&#xff0c;则采取思路二&#xff0c;即将中序遍历存入到哈希表中&#xff0c;…

基于卷积神经网络的图像去噪

目录 背影 卷积神经网络CNN的原理 卷积神经网络CNN的定义 卷积神经网络CNN的神经元 卷积神经网络CNN的激活函数 卷积神经网络CNN的传递函数 基于卷积神经网络的图像去噪 完整代码:基于卷积神经网络的图像去噪.rar资源-CSDN文库 https://download.csdn.net/download/abc9918351…

《隐私计算简易速速上手小册》第2章:关键技术介绍(2024 最新版)

文章目录 2.1 同态加密2.1.1 基础知识2.1.2 主要案例:云计算数据分析2.1.3 拓展案例 1:医疗数据分析2.1.4 拓展案例 2:金融风险评估2.2 安全多方计算(SMC)2.2.1 基础知识2.2.2 主要案例:跨机构金融数据共享2.2.3 拓展案例 1:医疗研究合作2.2.4 拓展案例 2:跨国界数据交…

飞天使-linux操作的一些技巧与知识点7-devops

文章目录 简述devopsCICD 简述devops 让技术团队&#xff0c;运维&#xff0c;测试等团队实现一体式流程自动化 进阶版图 CICD 持续集成&#xff0c; 从编译&#xff0c;测试&#xff0c;发布的完成自动化流程 持续交付&#xff0c;包含持续集成&#xff0c;并且将项目部署…

复旦大学MBA:AIGC时代,科技与商业迸发更绚烂的火花

ChatGPT问世以来&#xff0c;AI技术及应用进入一个全速推进的通道&#xff0c;快速迈入通用大模型时代。从AGI(人工通用智能&#xff09;到AIGC(AI多模态内容生成&#xff09;&#xff0c;AI正在飞速重塑各个行业、人类生活乃至人类的未来。在商业领域更是给营销场景和营销工具…

Flutter开发进阶之Package

Flutter开发进阶之Package 通常我们在Flutter开发中需要将部分功能与整体项目隔离&#xff0c;一般有两种方案Plugin和Package&#xff0c;Application是作为主体项目&#xff0c;Module是作为原生项目接入Flutter模块。 当独立模块不需要与原生项目通讯只需要Plugin就可以&a…

【数据结构-字符串 五】【字符串转换】字符串转为整数

废话不多说&#xff0c;喊一句号子鼓励自己&#xff1a;程序员永不失业&#xff0c;程序员走向架构&#xff01;本篇Blog的主题是【字符串转换】&#xff0c;使用【字符串】这个基本的数据结构来实现&#xff0c;这个高频题的站点是&#xff1a;CodeTop&#xff0c;筛选条件为&…