嵌入式学习-c语言字符串处理函数

news2025/5/14 1:11:17

字符串处理函数头文件

在c语言程序中要想使用字符串处理函数,就需要加头文件 #include<string.h>

常见的字符串处理函数

① 求字符串长度的函数strlen
② 字符串拷贝函数strcpy
③ 字符串连接函数strcat
④ 字符串比较函数strcmp
⑤ 字符串分解函数strtok

strlen函数

在C语言中,strlen() 是一个库函数,用于计算字符串的长度,即字符串中字符的数量(不包括结尾的空字符 \0)。

strlen() 函数的函数原型如下:

size_t strlen(const char* str);

函数接受一个参数 str,表示要计算长度的字符串。

实例:

	char jsch[] = {'v','\0','c','b','\0','a'};
	char tsch[] = "t\t\a\b\\bb";
	char tsch1[] = "\x69\141\n";
	printf("%s的长度为%d\n",jsch,strlen(jsch));
	printf("%s的长度为%d,用公式为%d\n",tsch,strlen(tsch),sizeof(tsch)/sizeof(char));
	printf("%s的长度为%d\n",tsch1,strlen(tsch1));

输出:

v的长度为1
t      \bb的长度为7,用公式为8
ia
的长度为3

从这个例子可以看出字符串就是一遇到’\0’就结束了,且strlen函数也不会计算’\0’,同时特殊字符\t\a\b等,每个字符带上\总共占一个长度,且像转义序列\x69和\141这样的,每个序列占一个字符长度

strcpy函数

要用这个函数,首先参数一定得是字符串才行。
在C语言中,strcpy() 是一个用于字符串复制的库函数,用于将一个字符串拷贝到另一个字符串中。它的函数原型如下:

char* strcpy(char* destination, const char* source);

函数接受两个参数:destinationsource,分别表示目标字符串源字符串。这个函数的返回值目标字符串的首地址

strcpy() 的作用是将源字符串中的内容复制到目标字符串中请务必注意这里的复制顺序,先写目标字符串),包括字符串的结束标志 \0它会从源字符串的起始位置开始复制,直到遇到结束标志 \0。注意,目标字符串必须足够大,以容纳源字符串的内容,否则可能导致缓冲区溢出的安全问题。

下面是一个使用 strcpy() 的示例:

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

int main() {
    char source[] = "Hello, World!";
    char destination[20];

    strcpy(destination, source);

    printf("目标字符串是:%s\n", destination);

    return 0;
}

在上述示例中,我们声明了 source 字符数组作为源字符串,包含了 “Hello, World!”。然后,我们声明了 destination 字符数组作为目标字符串,长度为 20。通过调用 strcpy(destination, source) 将 source 中的内容复制到 destination 中。

最后,我们打印输出 destination 字符串,结果应该是 “Hello, World!”。

如果不用这个函数进行拷贝字符串,那么只能通过循环一个一个字符的复制到新字符串里,而不能直接 数组名 = 数组名 这样赋值。

strcat函数

同样,这个函数的前提是参数必须是字符串
假如输入的参数不是字符串,那么输出结果就不受控制了。
在这里插入图片描述

在这里插入图片描述

在C语言中,strcat()是一个字符串拼接函数,用于将源字符串连接到目标字符串的末尾。

strcat()函数的函数原型如下:

char* strcat(char* destination, const char* source);

函数接受两个参数:destination和source,分别表示目标字符串和源字符串。这个函数的返回值目标字符串的首地址

strcat()函数会将源字符串中的字符依次拼接到目标字符串的末尾,直到遇到源字符串的结束标志\0。拼接后的目标字符串仍然以\0结尾。
在这里插入图片描述

下面是使用strcat()函数的示例:

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

int main() {
    char str1[30] = "Hello";
    char str2[] = " World!";

    strcat(str1, str2);

    printf("拼接后的字符串是:%s\n", str1);

    return 0;
}

在上述示例中,我们声明了一个目标字符串str1,内容是"Hello",并且声明了一个源字符串str2,内容是" World!"。通过调用strcat(str1, str2),将str2拼接到str1的末尾。

最后,我们打印输出拼接后的字符串,结果应该是"Hello World!"。

strcmp函数

strcmp()是C语言中的一个库函数,用于比较两个字符串的大小。
注意如果两个字符串的长度不一致,那么在比较完已有字符部分后还会比较’\0’字符,也就是字符串的结束字符。
strcmp()函数的函数原型如下:

int strcmp(const char* str1, const char* str2);

函数接受两个参数:str1和str2,分别表示要进行比较的两个字符串。

strcmp()函数会按照字典顺序逐个比较两个字符串中的字符,直到:

遇到不同的字符,则返回比较字符的差值(ASCII码差值)。注意这里不是比较字符长度,而是比较ASCII码的大小。
遇到字符串结束标志\0,则返回0,表示两个字符串相等。
返回值意义的示例:

如果返回值小于0,表示str1小于str2。
如果返回值大于0,表示str1大于str2。
如果返回值等于0,表示str1等于str2。

下面是使用strcmp()函数的示例:

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

int main() {
    char str1[] = "apple";
    char str2[] = "banana";
    char str3[] = "apple";

    int result1 = strcmp(str1, str2);
    int result2 = strcmp(str1, str3);

    printf("result1: %d\n", result1);
    printf("result2: %d\n", result2);

    return 0;
}

在上述示例中,我们通过调用strcmp()函数来比较字符串。result1存储了比较str1和str2的结果,result2存储了比较str1和str3的结果。

最后,我们打印输出比较结果。

运行上述示例,结果应该是:

result1: -1
result2: 0

这是因为"apple"在字典顺序中小于"banana",所以result1为-1;而"apple"和"apple"相等,所以result2为0。

strncpy(p,p1,n)

复制指定长度字符串

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

int main(){
	char src[] = "srcsrcsrc";
	char det[20];
	strncpy(det,src,3);
	det[3] = '\0';//手动添加'\0'
	printf("复制了3个字符到det里:%s",det);
	return 0;
}

这个例子是把src字符串的前三个字符复制给det数组,但由于前三个字符不包含’\0’,以及一般用这个函数都不包含’\0’,所以一般都需要手动添加’\0’,否则就会输出乱码或者随机值导致结果错误。

在这里插入图片描述
这个例子是在另一个字符串也有值的情况下进行复制,src的前四位复制到dest里后覆盖了dest的前四位最后被打印出来,需要注意的是这里覆盖的情况

strncat(p,p1,n)

附加指定长度字符串

//此时det数组为"src"
 char array[] = "abcde";
    strncat(array,det,1);
	printf("连接了一个s到abcde后面:%s",array);

输出结果:

连接了一个s到abcde后面:abcdes

strcasecmp

忽略大小写比较字符串

char arr[] = "abc";
	char arr1[] = "ABC";
	printf("测试是否忽略大小写比较:%d\n",strcasecmp(arr,arr1));

输出结果:

测试是否忽略大小写比较:0

strncmp(p,p1,n)

比较指定长度字符串

char arr[] = "ABc";
char arr1[] = "ABC";
printf("%s和%s的五位数比较:%d\n",arr,arr1,strncmp(arr,arr1,2));

输出结果为:

ABc和ABC的两位数比较:0

strchr(p,c)

在字符串中查找指定字符
strchr是C语言中的一个字符串操作函数,用于在一个字符串中查找某个字符的出现位置。它的函数原型如下:

char *strchr(const char *str, int character);

该函数接受两个参数,str是要进行查找的字符串,character是要查找的目标字符的ASCII码值。(注意后面的参数是int类型

strchr函数返回目标字符在源字符串中的第一个匹配位置的指针(可以用%p接收)。如果目标字符未在源字符串中找到,则返回NULL。
如果想要反向查找(也就是查找最后一次出现的字符),那么只需要用strrchr函数即可,即在中间加一个’r’。

char arr[] = "ABc";
int c = 'B';
printf("起始地址:%p,在%s中查找B的结果是:%p\n",arr,arr,strchr(arr,c));
printf("在%s中查找B的结果用下标表示为:%d",arr,strchr(arr,c)-arr);

输出结果:

起始地址:0xbf89a6d9,在ABc中查找B的结果是:0xbf89a6da
在ABc中查找B的结果用下标表示为:1

可以看出,利用这个函数可以让要查找字符的位置以严格的十六进制输出,也可以通过和字符串起始地址相减得到要查找字符的下标。

strstr(p,p1)

strstr是C语言中的一个字符串操作函数,用于在一个字符串中查找另一个子串的出现位置。它的函数原型如下:

char *strstr(const char *haystack, const char *needle);

该函数接受两个参数,haystack是要进行查找的字符串,needle是要查找的目标子串。(注意这里后面也是char类型,和查找单个字符不同)

strstr函数返回目标子串第一次出现在源字符串中的位置的指针。如果目标子串未在源字符串中找到,则返回NULL。

char array1[] = "ABCDE";
char arr1[] = "ABC";

printf("起始地址:%p,在%s中查找%s的结果是:%p\n",array1,array1,arr1,strstr(array1,arr1));

输出结果:

起始地址:0xbfb701b1,在ABCDE中查找ABC的结果是:0xbfb701b1

可见,strstr函数返回的是ABC在ABCDE中第一次出现的位置

isalpha函数

检查是否为字母字符
使用时需加入头文件 #include<ctype.h>

strtok函数

strtok是C语言中的一个字符串处理函数,用于将字符串拆分成一个个标记(token)。

该函数定义在<string.h>头文件中。strtok函数的原型如下:

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

函数接受两个参数:

  • str:要拆分的字符串,第一次调用时传入原始字符串,后续调用传入NULL
  • delim:用于指定拆分字符串的分隔符字符集合。

strtok函数的工作过程如下:

  1. 第一次调用时,将原始字符串作为参数传入str,并返回第一个标记。
  2. 后续的调用中,将参数NULL传入str,函数将继续从上次停止的位置继续拆分字符串,并返回下一个标记。
  3. 如果在拆分过程中未找到更多标记,则返回NULL

strtok函数根据指定的分隔符将字符串拆分成一个个标记,并使用内部的静态变量来记录拆分的状态。每次调用函数时,它会从上次停止的位置继续拆分。

以下是一个使用strtok函数将字符串拆分为多个标记的示例:

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

int main() {
    char str[] = "Apple, Banana, Orange, Mango";
    const char *delim = ", ";
    char *token = strtok(str, delim);

    while (token != NULL) {
        printf("%s\n", token);
        token = strtok(NULL, delim);
    }

    return 0;
}

在这个示例中,我们将字符串"Apple, Banana, Orange, Mango"按照逗号和空格作为分隔符进行拆分。我们首先使用strtok函数将第一个标记获取回来,然后在循环中不断使用strtok(NULL, delim)来获取下一个标记,直到没有更多标记为止。

输出结果将会是:

Apple
Banana
Orange
Mango

需要注意的是,在使用strtok函数时,原始字符串会被修改。如果需要保留原始字符串,建议先创建其副本进行操作。此外,当字符串中存在连续的分隔符时,strtok会将连续的分隔符视为一个分隔符处理,拆分时会跳过空的标记。

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

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

相关文章

保姆级WireShark的入门教程,速度收藏!

晚上好&#xff0c;我是老杨。 wireshark是个啥就不多说了&#xff0c;非常流行的网络封包分析软件。 可以截取各种网络封包&#xff0c;显示网络封包的详细信息。 软件功能十分强大&#xff0c;操作也不复杂。 很多小友都在后台问能不能出一期完整的抓包分析贴&#xff0c…

Nginx入门——Nginx的docker版本和windows版本安装和使用 代理的概念 负载分配策略

目录 引出nginx是啥正向代理和反向代理正向代理反向代理 nginx的安装使用Docker版本的nginx安装下载创建挂载文件获取配置文件创建docker容器拷贝容器中的配置文件删除容器 创建运行容器开放端口进行代理和测试 Windows版本的使用反向代理多个端口运行日志查看启动关闭重启 负载…

AD的软件安装,使用(仅学习用途),中英文切换,背景颜色设置,AD工程组成即创建

1.百度网盘地址如下&#xff1a; 链接&#xff1a;百度网盘 请输入提取码 提取码&#xff1a;j2hf git地址如下&#xff1a;(软件过大&#xff0c;暂时没有完全上传至git仓库内&#xff0c;稍后更新) 2.安装&#xff1a; 一.使用百度网盘或者git下载后&#xff0c;双击点开…

数据中台容易失败的20多种原因全部在这里了

数据中台失败的原因总结 在当今数字化转型的浪潮中&#xff0c;数据中台作为关键的战略举措被越来越多的企业所关注和实施。然而&#xff0c;数据中台项目的实施过程中并不乏失败案例&#xff0c;这引业界对于数据中台失败原因的深入思考和分析。通过一些公开的信息和数据&…

开源社区的力量:合作与创新

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

68、使用aws官方的demo和配置aws服务,进行视频流上传播放

基本思想&#xff1a;参考官方视频&#xff0c;进行了配置aws&#xff0c;测试了视频推流&#xff0c;rtsp和mp4格式的视频貌似有问题&#xff0c;待调研和解决 第一步&#xff1a;1) 进入aws的网站&#xff0c;然后进入ioT Core 2)先配置 Thing types & Thing&#xff0c…

每日一题:leetcode 1267

这里有一幅服务器分布图&#xff0c;服务器的位置标识在 m * n 的整数矩阵网格 grid 中&#xff0c;1 表示单元格上有服务器&#xff0c;0 表示没有。 如果两台服务器位于同一行或者同一列&#xff0c;我们就认为它们之间可以进行通信。 请你统计并返回能够与至少一台其他服务…

[管理与领导-44]:IT基层管理者 - 个人管理 - 从掌握管理知识开始入门:管理的常识和基础

目录 前言&#xff1a;管理框架 一、什么是管理 1.1 以终为始 1.2、资源的优化配置&#xff08;人财物、权力、时间等资源&#xff09; 1.2.1 资源的优化配置的步骤 1.2.2 管理者拥有的资源 1.2.3 管理者的权力资源 1.3 分而治之 1.3.1 分目标&#xff1a;细化和分解目…

个人微信AI聊天机器人

个人微信AI聊天机器人 微信AI机器人介绍产品介绍联系本人微信&#xff1a;yao_you_meng_xiang代码地址&#xff1a;https://github.com/xshxsh/weChatAiRobot 前期准备个人微信号Windows电脑注册AI模型账号 搭建使用注册AI账号注册讯飞账号创建应用申请API使用 安装微信 安装代…

概率密度函数 累积分布函数

概率密度函数&#xff1a;是指想要求得面积的图形表达式&#xff0c;注意只是表达式&#xff0c;要乘上区间才是概率&#xff0c;所以概率密度并不是概率&#xff0c;而是概率的分布程度。 为什么要引入概率密度&#xff0c;可能是因为连续变量&#xff0c;无法求出某个变量的…

FreeSWITCH 1.10.10 简单图形化界面2 - 并发性能测试

FreeSWITCH 1.10.10 简单图形化界面2 - 并发性能测试 0. 界面预览1. 测试工具批量创建baresip配置文件批量注册baresipSIP终端 2. 测试方法fsapi呼叫脚本 3 服务器环境CPU 配置内存配置 4 语音并发测试结果&#xff08;1&#xff09;1000分机&#xff0c;创建账号后&#xff0c…

大型商城小程序源码_免费开源_OctShop

毫无疑问小程序&#xff0c;对电商行业的商机是很明显的。相比h5/wap、公众号等商城&#xff0c;具备更大的发展空间。其次就是交易成本低&#xff0c;交易标准化、流量来源与转化多样化等优势&#xff0c;能让商户和买家更加方便、快捷的访问小程序&#xff0c;为用户提供更加…

商业经济杂志商业经济杂志社商业经济编辑部2023年第9期目录

专家论坛 黑龙江省经济高质量发展与生态环境保护耦合协调发展研究 刘降斌;祃玉帅; 1-5142 我国省际数字经济高质量发展水平综合评价研究 耿娟;毕晨曦; 6-8 振兴龙江《商业经济》投稿&#xff1a;cnqikantg126.com 数字经济背景下黑龙江省冰雪产业价值链的发展研究 …

哈夫曼树:优雅的数据编码之道

前言 在计算机科学领域&#xff0c;哈夫曼树&#xff08;Huffman Tree&#xff09;是一种令人惊叹的数据结构&#xff0c;它不仅可以高效地实现数据压缩&#xff0c;还能在信息传输和存储方面发挥重要作用。本文将从另一个角度深入探讨哈夫曼树的构建原理、编码过程以及应用案…

远程I0(遥控IO)

内容参考自串口连接云平台实现异地远程控制io模块&#xff08;以综科智控的I/O为例&#xff09;_io_智控_异地 根据个人理解&#xff0c;记录一下&#xff1a; 1、在A地&#xff0c;通过串口助手 发送开/关指令&#xff0c;控制B地的指示灯亮/灭 2、实现效果

==和===的区别(经典面试题,你不知道的细节)

全等运算符 又叫全等运算符&#xff0c;结果会返回一个布尔值&#xff0c;在数据类型相同的情况下&#xff0c;会比较值&#xff0c;值相同才返回true "1" 1 // false NaN NaN // false undefined undefined // true相等运算符 相等运算符在比较两个变量是否相…

【C++】构造函数和初始化列表的性能差距

构造函数和初始化列表的性能差距对比测试 1.说明 在C类和对象中&#xff0c;你可能听到过更加推荐用初始化列表来初始化类内成员。如果类内成员是自定义类型&#xff0c;则只能在初始化列表中调用自定义类型的构造函数。 但初始化列表和在构造函数体内直接赋值有无性能差距呢…

亚马逊买家不能评论有哪些原因?怎么解决

如果你在亚马逊平台无法发表评论&#xff0c;那么以下几个是原因及解决方法&#xff1a; 1、账户问题&#xff1a;如果你的亚马逊账户存在异常或限制&#xff0c;可能就会被禁止或限制在产品页面上发表评论。因此你需要确保你的亚马逊账户信息是完整和准确的&#xff0c;包括联…

Web 开发 Django 管理工具

上次为大家介绍了 Django 的模型&#xff0c;通过模型就可以操作数据库&#xff0c;从而就可以改变页面的展示内容&#xff0c;那问题来了&#xff0c;我们只能通过手动编辑模型文件来配置模型吗&#xff1f;当然不是&#xff0c;Django 为我们提供了强大的工具&#xff0c;可以…

【HTML】基础语法讲解

基础语法 1. HTML 结构1.1 认识HTML标签1.2 HTML 文件基本结构1.3 标签层次结构1.4 快速生成代码框架 2. HTML 常见标签2.1 注释标签2.2 标题标签:h1-h62.3 段落标签:p2.4 <br>换行标签2.5 格式化标签2.6 图片标签&#xff1a;img2.7 超链接标签&#xff1a;a2.8 表格标签…