C/C++字符串函数

C/C++常用的字符串函数 字符串函数(String processing function)也叫字符串处理函数,指的是编程语言中用来进行字符串处理的函数,需要调用头文件include。在C/C++编程中经常会遇到字符串的处理,比如路径的切割、信号的判断(字符串比较),以及字符串大小的计算,熟练掌握常用的字符串函数,了解其可以实现的功能,对于做项目大有裨益。 阅读详情

不受限制

字符串的长度

strlen(const char* s)
在s中遇到’\0’为止,返回字符串长度

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>

int main()
{
	char str[10] = "Hello";
	int len = strlen(str);
	printf("%d\n", len);//求出长度为5,不会算'\0'
	//sizeof()就会加上'\0'
	int sz = sizeof(str);
	printf("%d\n", sz);//求出数组总大小包括'\0'
	return 0;
}

字符串的拷贝

字符串拷贝(全部拷贝过来,不受限制)

strcpy(char* des , const char* src)
把src中的内容拷贝至des,如果des中有数据,就会被全部覆盖

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
int main()
{
	char s[10] = "hello";
	char* s2 = "world";
	printf("原数据:%s\n", s);
	strcpy(s, s2);
	printf("拷贝后的数据:s = %s\n", s);
	return 0;
}

注意:目标字符串的长度空间要大于原字符串长度空间。

字符串的追加

字符串追加(全部追加过来,不受限制) strcat(char* des,const char* src)

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>

int main()
{
	char str[15] = "hello";
	char* sr = "world";
	strcat(str, sr);
	printf("追加后:%s\n", str);
	return 0;
}

在这里插入图片描述
注意:目标字符串长度空间要大于原字符串长度空间
sizeof(str)>sizeof(sr)

字符串的比较

字符串比较 (原字符串全部比较,不受限制)
strcmp(char* des,const char* src)

=0 相等
0 字符串des大于字符串src
<0 字符串des小于字符串src

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
int main()
{
//比较结果三种不同的值
	char s1[10] = "Hello";
	char s2[10] = "Worldhhh";
	char s3[10] = "A";
	char s4[10] = "Hello";
	int l1 = strcmp(s1, s2);//小于
	printf("l1 = %d\n", l1);
	int l2 = strcmp(s1, s3);//大于
	printf("l2 = %d\n", l2);
	int l3 = strcmp(s1, s4);//相等
	printf("l3 = %d\n", l3);
	return 0;
}

在这里插入图片描述

字符查找

strchr(char* des,int c)
在字符串des中查找字符src找到了就返回第一次出现
src的地址,没找到返回NULL指针

int main()
{
	char s[10] = "helda";
	char s2 = 'e';
	printf("e 首地址:%d\n", &s[1]);
	char* sz = strchr(s, s2);
	printf("sz 返回首地址 = %d", sz);
}

在s中找到了字符e,返回e的地址
运行结果:
在这里插入图片描述

受限制

字符串拷贝(受限制,指定长度拷贝)

strncpy(char* des, const char* src,unsigned int size)
des是要拷贝到哪个字符串中
src是要拷贝的源字符串首地址,size是指要拷贝的字符的个数

int main(){
	char s[10] = "hello";
	char s2[10] = { 0 };
	strncpy(s2, s, 4);
	printf("s2 = %s", s2);
}

我只截取了前面4位所以显示hell
在这里插入图片描述

字符串追加(受限制,指定长度追加)

strncat(char* des, const char* src,unsigned int size)
des是要追加到哪个字符串后面
src是要追加的源字符串首地址,size是指要追加的字符的个数

int mian()
{
	char s[10] = "hello";
	char s2[10] = "wo";
	strncat(s, s2, 1);
	printf("s = %s", s);
}

我只追加了一个字符,所以hello只追加一个字符
运行结果:
在这里插入图片描述

字符串比较(受限制,指定长度比较)

strncmp(char* des, const char* src,unsigned int size)
des是要比较的目的字符串
src要比较的源字符串是首地址,size是指要比较的字符的个数

int main()
{
	char s[10] = "hello";
	char s2[10] = "helda";
	int ret = strncmp(s, s2, 3);
	printf("ret = %d", ret);
}

我只比较了前面3个字符,所以返回0是相等的
运行结果:
在这里插入图片描述

字符串查找(受限制,指定长度查找)

strstr(char* des,const char* src)
在字符串des中查找src,找到了,就返回第一次出现的src的首地址,没找到返回NULL指针

int main()
{
	char s[10] = "helda";
	char s2[10] = "helzs";
	printf("s2 首地址:%d\n", s2);
	char* sz = strstr(s, s2);
	printf("sz 返回首地址 = %d",sz );
}

未找到返回空指针
运行结果:
在这里插入图片描述

字符串分段

strtok(char* des,const char* src)
字符串des中找到src就返回src之前的字符串
在之后strtok(NULL,src)继续查找src找到了就返回上一次找到的src之后到这一次找到的src之前的字符串直至找不到就会返回空指针。

int main()
{
	char s[10] = "hel";
	char s2[10] = "helsada";
	char * res = strtok(s2, s);
	printf("res = %#x\n", res);
	char* ret = strtok(NULL, s);
	printf("ret = %d", ret);
}

在s2中截取了s那一段,s2找到s之前的字符串首地址
运行结果
在这里插入图片描述

内存操作函数

内存拷贝

void *memcpy(void dest, const void src, size_t n)
我们可以看见,str1,str2都是void
的返回类型也是void
所以它可以拷贝包括自定义类型的内存
n表示拷贝的长度

int main(){
	char s[10] = "hello";
	char s2[10];
	memcpy(s2, s, 3);
	printf("s2 = %s", s2);
}

我只拷贝了3个字符所以s2只有hel
运行结果:
在这里插入图片描述

内存移动覆盖

void * memmove ( void * destination, const void * source, size_t num )
从source中移动num长度的字符到destination,从destination首地址开始覆盖
返回移动好的首地址

int main(){
	char s[10] = "hello";
	char s2[10] = "why";
	memmove(s, s2, 2);
	printf("s = %s", s);
}

我把s2中的前2个字符移到了s中,并且覆盖了s中的前两个字符。
运行结果:
在这里插入图片描述

内存设置(常用于初始化)

void * memset(void* str,int c,size_t n)
将str的前n个字符的内容全部设置为c-----我们常用于初始化
返回设置好的首地址

int main(){
	char s[10] = "hello";
	char s2[10];
	memset(s2, 'a', sizeof(char) * 10);
	for (int i = 0; i < sizeof(char)*10; i++)
	{
		printf("s2 = %c\n", *(s2 + i));
	}
}

我把字符串s2全部初始化为’a’
运行结果:
在这里插入图片描述

内存比较

void* memcmp(const void* ptr1,const char* ptr2,size_t num)
把ptr2的前num个字节与ptr1进行比较
ptr1 > ptr2返回大于零的值
ptr1 = ptr2返回零
ptr1 < ptr2返回小于零的值

int main(){
	char s[10] = "hello";
	char s2[10] = "hels";
	int ret1 = memcmp(s, s2, 3);
	int ret2 = memcmp(s, s2, 4);
	printf("ret1 = %d\n", ret1);
	printf("ret2 = %d", ret2);
}

第一次我比较前三个字符,相等返回0
第二次我比较前四个字符,s比s2小返回-1
在这里插入图片描述

c++中字符串操作函数合集 文章介绍了c++中常用的字符串操作函数及其用法 阅读详情

相关推荐

C++ 字符串常见函数全解析|高效处理文本的必备工具包

阳光透过半掩的百叶窗洒入整洁书房,原木书桌堆满编程书籍与咖啡杯,学生身着休闲装专注敲击键盘,紧盯 C++ 代码全神贯注

温情亿度网络科技 1228

C++ 字符串常用函数

C++ 字符串常用函数

qq_75225791的博客 3740

C/C++ 字符串转数字函数

文章目录1、atoi2、atol3、atof4、strtod5、strtol6、strtoul 1、atoi 功 能:把一字符串转换为整数 用 法:int atoi(const char *nptr); 详细解释:atoi是英文array to integer 的缩写。atoi()会扫描参数nptr字符串,如果第一个字符不是数字也不是正负号返回零,否则开始做类型转换,之后检测到非数字或结束符 /0 时停止转换,返回整型数。 参 数: *nptr: 待转化的字符串。 返回值:  int: 转换后的整形数。 2

流楚丶格念的博客 1万+

【C/C++】字符串函数之复制函数

C/C++字符串复制函数: C/C++字符串函数的头文件:string.h 复制函数主要有4个,如下: 1、char * strcpy(char* destination,const char * source); 2、char* strncpy(char* destination,const char* source,size_t num); 3、void * memcpy(void*...

qq_34018840的博客 2万+

从零到一:STM32CubeMX虚拟串口开发中的常见陷阱与优化策略

本文深入探讨了STM32CubeMX在USB虚拟串口开发中的常见问题与优化策略,涵盖数据流吞吐量瓶颈、实时性约束等核心挑战。通过实战案例和代码示例,详细解析了波特率同步异常、数据丢失等问题的解决方案,并提供了DMA配置和中断优先级调优的高级技巧,帮助开发者提升STM32虚拟串口的性能和可靠性。

weixin_29164185的博客 370

cadence——MOS晶体管I-V特性曲线仿真

MOS晶体管I-V特性曲线仿真 目标:使用cadence绘制晶体管的I-V特性曲线(dc仿真) 流程: 新建原理图,将MOS管的栅极电压设为变量Vg,漏极电压设为变量Vd 打开ADEL,点击Variables——Copy From Cellview添加变量;并选择dc仿真,对Vd进行扫描 以Vg作为参变量进行仿真,点击Tools——Parametric Analysis进行设置 选择漏极电流作为输出,进行仿真即可得到I-V特性曲线 ...

skycmq的博客 1万+

C/C++字符串函数之复制函数

突然发现对字符串函数缺乏系统的了解,所以花了一点时间专门整理下,在此记录之,以方便自己及有需要的人使用。 C/C++字符串函数的头文件:string.h 复制函数主要有4个,如下: 1、char * strcpy(char* destination,const char

1万+

MediaPipeUnityPlugin(最新版)摇摆拳人脸识别

MediaPipeUnityPlugin(最新版)摇摆拳人脸识别

不忘初心 方得始终 2981

C/C++常用字符串函数

字符串作为程序中常用的数据类型,学会对字符串进行处理是作为一名C/C++程序员的基本功,我们要学会使用相关函数,并且对重点函数要会自己手动实现(下文对重点函数有实现代码以及相关示例)以上就是我分享的字符串函数的全部内容了,希望对大家有些帮助,也希望与一样喜欢编程的朋友们共进步如果觉得还阔以的话,三连一下,以后会持续更新的,我会加油的祝大家早安午安晚安。

2301_80042078的博客 1021

Mac新手必看:为什么你的终端找不到Python命令?5分钟搞定zsh报错

本文针对Mac用户在终端遇到“zsh: command not found: python”报错的问题,提供了深度解析与实战修复指南。文章解释了macOS系统因历史原因默认使用`python3`而非`python`命令,并详细介绍了四种解决方案:养成使用`python3`的习惯、创建别名、通过Homebrew安装链接以及修改PATH环境变量,帮助新手快速解决zsh报错,顺利开始Python开发。

weixin_29248653的博客 594

基于深度学习 YOLOv11 的快递包裹检测系统(Python + PySide6 界面 + 训练代码)

成为亟需优化的重要环节。随着电子商务的快速发展,物流行业面临着越来越大的压力,为了解决这些问题,我们提出了一种。目标检测算法,实现快递包裹的。的界面,供用户进行实时监控。本项目的主要目标是利用。

斌擎科技 762

C/C++字符串查找函数

C/C++ string库(string.h)提供了几个字符串查找函数,如下: memchr 在指定内存里定位给定字符 strchr 在指定字符串里定位给定字符 strcspn 返回在字符串str1里找到字符串str2里的任意一个字符之前已查找的字符数量 strrchr 在字符串里定位给定字符最后一次出现的位置 strpbrk

guoduhua的专栏 1026

Python基础语法与最佳实践【python基础篇】

本文全面介绍了Python基础语法与最佳实践,涵盖变量与数据类型、控制流、函数、模块与包等核心概念。通过实际代码示例展示了条件语句、循环结构、函数定义及模块导入的基本用法。在最佳实践部分,重点讲解了PEP 8代码风格规范、异常处理技巧、列表推导式、上下文管理器、文档字符串编写以及enumerate和zip的高效使用。这些内容既适合Python初学者掌握基础语法,也能帮助有经验的开发者编写更规范、高效、可维护的代码。文章强调遵循Python官方推荐实践,通过合理运用语言特性提升代码质量。

博客 1977

字符串【C/C++函数操作】

字符串 博文简述C/C++中常见库函数的操作。 概念 字符串即由char型数组存储一组字符的表达形式,在C++中存在string类型对字符串进行存储与操作。字符串由’\0’作为结束的标志。 输入方法 char str[120] = {0}; 1.scanf("%s",str);//采用scanf可使用%s读取一段字符串,字符串读入遇到空白则结尾,自动添加'\0' 2.gets(str);//在C语言中已经废弃的函数,此函数并不安全。 3.//自定义readline函数 int readline(char s

QYQHxyh的博客 837

PCL点云DBSCAN聚类算法:基于密度的点云聚类

核心点是在给定半径内拥有足够多邻居点的点,边界点是在给定半径内没有足够多邻居点但是位于核心点的邻域内的点,噪声点是既不是核心点也不是边界点的点。本文将介绍PCL中的DBSCAN(基于密度的空间聚类应用噪声)算法,用于点云数据的聚类。上述示例代码首先从PCD文件中读取点云数据,并设置了DBSCAN聚类的参数,包括邻域搜索半径(epsilon)和邻域内最小点数(min_points)。需要注意的是,示例代码中的点云数据格式为pcl::PointXYZ,如果使用其他类型的点云数据,需要相应地修改代码。

LpmShell的博客 1239

最新Python爬虫实战(入门爬虫篇)——案例18:某气象局全国天气预报数据采集(详细爬虫思路截图 + 抓包动图演示+完整爬虫代码+详细注释)

本次案例针对某气象局天气预报网的静态HTML页面,实现了全国各地区天气数据的全自动化爬取,和之前案例17的动态接口爬虫不同,本次案例聚焦于静态页面的爬虫实现,覆盖了从抓包分析、请求模拟、数据解析到数据存储的完整爬虫流程,非常适合入门学习者巩固基础,核心知识点和实现要点总结如下:首先是页面分析的核心逻辑,静态HTML页面的数据爬取,核心在于通过浏览器开发者工具,完成完整的抓包分析和标签结构定位。

努力让自己发光,对的人才能迎着光而来 27万+

C/C++字符串函数使用整理

#strlen+功能:求字符串长度。+说明:strlen(a) 函数类型常为int,返回字符串长度大小,参数为字符数组名,也可为字符串和指向字符串的指针。+使用样例: char a[ ]={"abcde"}; n=strlen(a); cout<<n; 运行结果:5##strcat+功能:把前后两个字符串连接起来。+说明:strcat(a,b) 函数类型常为void,不返回数值,参数都...

weixin_33811961的博客 598

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

C/C++字符串转换到数字的函数

C/C++标准库stdlib.h中提供了字符串到数字的转换。 一、头文件 #include 二、函数列表 int atoi ( const char * str ); long int atol ( const char * str ); double atof ( c

5231

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

上一篇: C/C++指针数组与数组指针
下一篇: MFC基础之windows模型编程
若尘〆Jun
博客等级 码龄8年 31粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值