新手小白必了解c语言之字符串函数

本篇介绍字符串库函数为

 

目录

引言 

一:字符串函数的头文件为#include

二:求字符串长度函数 (strlen)

1.函数介绍

2.函数使用举例

3.模拟实现 

三:字符串复制函数(strcpy) 

1.函数介绍

2.函数使用举例

3.模拟实现 

四:字符串连接函数(strcat) 

1.函数介绍

2.函数使用举例

3.模拟实现 

五:字符串比较函数(strcmp) 

1.函数介绍

2.函数使用举例

3.模拟实现 

六: 字符串受限制函数(strncpy.strncmp,strncat)

1.函数介绍 

2.函数使用举例(举例介绍一个就行)

七:字符串寻找字符串函数 (strstr)

1.函数介绍

2.函数使用举例

3.模拟实现 

八: 字符串分割函数(strtok)

1.函数介绍

2.函数使用举例

九:字符串错误打印函数(strerror) 

1.函数介绍

2.函数使用举例

3.也可以使用perror函数来打印错误信息 

感谢观看


听说看到日落金山的人,接下来的日子会顺顺利利,万事胜意,生活明朗-----------林辞忧

引言 

1.c语言中字符串是一个特殊的存在,相关操作是由各式各样的字符串函数来实现的,接下来我们就讲解c语言中常见并且常用的字符串函数

2.

C语言中对字符和字符串的处理很是频繁,但是C语言本身是没有字符串类型的,字符串通常放在 常量字符串 中或者 字符数组 中。

字符串常量 适用于那些对它不做修改的字符串函数(用const修饰)

一:字符串函数的头文件为#include <string.h>

二:求字符串长度函数 (strlen)

1.函数介绍

注:size_t表示无符号整数即unsigned int

(1) 字符串以  '\0' 作为结束标志, strlen函数返回的是在字符串中 '\0' 前面出现的字符个数 (不包
'\0' )
(2) sizeof计算的是整个字符串的大小,单位为字节,包含'\0'
2.函数使用举例
#include <stdio.h>
#include <string.h>
int main()
{
  char s[81]="abcdef";
   int len=strlen(s);
   printf("%d",len);//计算结果为6
   return 0;
}

 

3.模拟实现 
#include <stdio.h>
size_t my_strlen(char *s1)
{
   //方法为为遍历这个字符数组,直到'\0'
   size_t count=0;
   while(*s1!='\0')
  {
     count++;
     s1++;
  }
  return count;
}

int main()
{
  char s[81]="abcdef";
  size_t ret=my_strlen(s);
  printf("%u",ret);
  return 0;
}

三:字符串复制函数(strcpy) 

1.函数介绍

(1) 这个函数会将字符串source复制到字符串destination,也将其'\0'复制过去

(2)字符串destination的空间必须足够大

(3)字符串source必须含字符串结束标志'\0'

2.函数使用举例
#include <stdio.h>
#include <string.h>
int main()
{
 char s1[81]="abcdef";
 char s2[81];
 strcpy(s2,s1);//将字符串s1的内容复制给字符串s2
 puts(s2);//字符串输出函数
 return 0;
}

 

 

3.模拟实现 
#include <stdio.h>
#include <string.h>
char * my_strcpy(char *des,const char *sou)
{
   //遍历字符串sou,直至'\0'
    char *ret=des;
    while(*des++=*sou++);
   return ret;
}
int main()
{
 char s1[81]="abcdef";
 char s2[81];
 my_strcpy(s2,s1);
 puts(s2);
 return 0;
}

四:字符串连接函数(strcat) 

1.函数介绍

 

(1) 这个函数会将字符串source连接到字符串destination的后面

(2)字符串destination的空间必须足够大

(3)字符串source必须含字符串结束标志'\0'

(4)尽量不要自己连接自己

2.函数使用举例
#include <string.h>
#include <stdio.h>
int main()
{
  char s1[81]="abc";
  char s2[81]="def";
  strcat(s1,s2);
  puts(s1);
  return 0;
}

 

3.模拟实现 
#include <string.h>
#include <stdio.h>
char *my_strcat(char *des,const char *sou)
{
	char *ret=des;
	while(*des!='\0')//遍历字符串des直至'\0'
	{
		des++;
	}
//遍历完des后,将字符串sou的内容复制给字符串des
	while(*des++=*sou++);
	return ret;
}
int main()
{
  char s1[81]="abc";
  char s2[81]="def";
  my_strcat(s1,s2);
  puts(s1);
  return 0;
}

五:字符串比较函数(strcmp) 

1.函数介绍

(1) 这个函数是用来比较两个字符串的大小的,从两个字符串的起始位置开始比较,相同则继续比较,不同则返回一个int 类型的值,直至'\0',如果比较完还是一样的话返回0

(2)比较规则:大写字母小于小写字母,小写字母之间根据小写字母的ASCII码值来比较

(3)返回值规则:

第一个字符串大于第二个字符串,则返回大于 0 的数字
第一个字符串等于第二个字符串,则返回 0
第一个字符串小于第二个字符串,则返回小于 0 的数字
2.函数使用举例
#include <string.h>
#include <stdio.h>
int main()
{
  char s1[81]="abc";
  char s2[81]="abe";
  int ret=strcmp(s1,s2);
  printf("%d\n",ret);
  return 0;
}

 

3.模拟实现 
#include <stdio.h>
#include <string.h>
int my_strcmp(const char *des,const char *sou)
{
  while(*des==*sou);
  {
  	if(*des=='\0') return 0;
  	des++;
  	sou++;
  }
  if(*des>*sou) return 1;
  else if(*des<*sou) return -1;
}
int main()
{
  
   int ret=my_strcmp("abc","abd");
   printf("%d",ret);
   return 0;
}

六: 字符串受限制函数(strncpy.strncmp,strncat)

1.函数介绍 

 

 

 

 

(1) 通过与上面几个函数比较,参数只多了个size_t num,代表意思为只复制/比较/连接num个字符

(2)比较到出现另个字符不一样或者一个字符串结束或者num个字符全部比较完。

(3)如果源字符串的长度小于num,则拷贝完源字符串之后,在目标的后边追加0,直到num个。

2.函数使用举例(举例介绍一个就行)
#include <stdio.h>
#include <string.h>
int main()
{ 
  char s1[81]="abcdef";
  char s2[81]="****";
  strncpy(s2,s1,3);
  puts(s2);
}

 

七:字符串寻找字符串函数 (strstr)

1.函数介绍

(1)此函数为字符串中寻找子字符串的函数 

2.函数使用举例
#include <stdio.h>
#include <string.h>
int main()
{
	char s1[]="abcdefabcdef";
	char s2[]="def";
	char *ret=strstr(s1,s2);
	if(ret!=NULL)
	{
		printf("%s\n",ret);
	}
	else
	{
		printf("找不到\n");
	}
	return 0;
}

 

3.模拟实现 

#include <stdio.h>
char* my_strstr(char* str1, char* str2)
{
	char* cp = str1;
	char* s1 = cp;
	char* s2 = str2;
	while (*cp)
	{
		s1 = cp;
		s2 = str2;
		while (*s1 && *s2 && *s1 == *s2)
		{
			s1++;
			s2++;
		}
		if (*s2 == '\0')return cp;
		cp++;
	}
	return NULL;
}
int main()
{
	char s1[] = "abbbcdef";
	char s2[] = "bbc";
	char* ret = my_strstr(s1, s2);
	if (ret != NULL)
	{
		printf("%s\n",ret);
	}
	else
	{
		printf("找不到\n");
	}
	return 0;
}

 

八: 字符串分割函数(strtok)

1.函数介绍

 

(1) sep参数是个字符串,定义了用作分隔符的字符集合

(2)第一个参数指定一个字符串,它包含了0个或者多个由sep字符串中一个或者多个分隔符分割的标记。

(3)strtok函数找到str中的下一个标记,并将其用 \0 结尾,返回一个指向这个标记的指针。(注: strtok函数会改变被操作的字符串,所以在使用strtok函数切分的字符串一般都是临时拷贝的内容并且可修改。)

(4)strtok函数的第一个参数不为 NULL ,函数将找到str中第一个标记,strtok函数将保存它在字符串中的位置。

(5)strtok函数的第一个参数为 NULL ,函数将在同一个字符串中被保存的位置开始,查找下一个标记。

(6)如果字符串中不存在更多的标记,则返回 NULL 指针。

2.函数使用举例
#include <stdio.h>
#include <string.h>
int main()
{
	char s1[]="abcdef@year.net";
	char s2[81];
	strcpy(s2,s1);
	char sep[]="@.";
	//方法一: 
	//char *ret=strtok(s2,sep);
	//printf("%s\n",ret);
	
	//ret=strtok(NULL,sep);
	//printf("%s\n",ret);
	
	//ret=strtok(NULL,sep);
	//printf("%s\n",ret);
	
	//方法二: 
   char *ret=NULL;
   for(ret=strtok(s2,sep);ret!=NULL;ret=strtok(NULL,sep)) 
   {
   	printf("%s\n",ret);
   }
	return 0;
}

 

九:字符串错误打印函数(strerror) 

1.函数介绍

(1) 返回错误码,所对应的错误信息。

(2)库函数在执行过程中,发生了错位会将一个错误码存放在errno这个变量中,errno是c语言提供的一个全局的变量

2.函数使用举例

3.也可以使用perror函数来打印错误信息 

感谢观看

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

lombok注解 @Data使用在继承类上时出现警告解决

一、警告问题 1、Data注解 Data 包含了 ToString、EqualsAndHashCode、Getter / Setter和RequiredArgsConstructor的功能。 当使用 Data注解时&#xff0c;则有了 EqualsAndHashCode注解&#xff08;即EqualsAndHashCode(callSuperfalse)&#xff09;&#xff0c;那么就会在此…

uni-app 经验分享,从入门到离职(实战篇)——模拟从后台获取图片路径数据后授权相册以及保存图片到本地(手机相册)

文章目录 &#x1f4cb;前言⏬关于专栏 &#x1f3af;需求描述&#x1f3af;前置知识点&#x1f9e9;uni.showLoading()&#x1f9e9;uni.authorize()&#x1f9e9;uni.downloadFile()&#x1f9e9;uni.saveImageToPhotosAlbum() &#x1f3af;演示代码&#x1f9e9;关于图片接…

YOLOv5改进 | 2023 | SCConv空间和通道重构卷积(精细化检测,又轻量又提点)

一、本文介绍 本文给大家带来的改进内容是SCConv,即空间和通道重构卷积,是一种发布于2023.9月份的一个新的改进机制。它的核心创新在于能够同时处理图像的空间(形状、结构)和通道(色彩、深度)信息,这样的处理方式使得SCConv在分析图像时更加精细和高效。这种技术不仅适…

DP专题9 理解01背包问题

本题链接&#xff1a;晴问算法 题目&#xff1a; 样例&#xff1a; 输入 5 8 3 5 1 2 2 4 5 2 1 3 输出 10 思路&#xff1a; 对于 01 背包问题&#xff0c;我们需要明确 DP 数组的含义&#xff0c;这里 经典的 01 背包问题可以用 二维DP进行表示。 即&#xff1a; dp[ i ]…

【C++】类和对象详解(类的使用,this指针)

文章目录 前言面向过程和面向对象的初步认识类的引入类的定义类的访问限定符和封装性访问限定符封装性 类的作用域类的实例化类对象模型如何计算类对象的大小类对象的存储方式猜测结构体内存对齐规则 this指针this指针的引出this指针的特性 总结 前言 提示&#xff1a;这里可以…

红帽Redhat安装教程及安装出错(Liunx)

一、红帽5安装 1.打开vmware,新建虚拟机。或者文件→新建虚拟机 2.自定义,下一步 3.下一步 4.稍后安装操作系统,下一步 5.linux 红帽5 64位,下一步 6.给虚拟机取名字,选择安装路径。下一步 7.下一步(可以根据自己的电脑配置稍微增加数量) 8.4GB 下一步 9.仅主机(根据需…

运维工程师——敢问路在何方!

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 ✨特色专栏&#xff1a…

[NISACTF 2022]popchains

[NISACTF 2022]popchains wp 题目代码&#xff1a; Happy New Year~ MAKE A WISH <?phpecho Happy New Year~ MAKE A WISH<br>;if(isset($_GET[wish])){unserialize($_GET[wish]); } else{$anew Road_is_Long;highlight_file(__FILE__); } /**********************…

RTT打印时间戳

官方的RTT VIEWER没有打印接收时间戳的功能&#xff0c;经过查找后发现可以有以下三种打印时间戳的方法。 第三方的RTT上位机ExtraPutty自己打印 第三方的RTT上位机 码云上有一个RTT_T2的仓库&#xff0c;基于python qt包写的画面&#xff0c;通过pylink来jlink通信。 优点…

CorelDRAW 2023 中文破解、终身永久版 (附序列号)

CorelDRAW2023是一款非常专业的电脑图像设计工具。该产品推出了全新的2023版本&#xff0c;在功能和体验上更进一步&#xff0c;最新的填充和透明设备功能可以完全控制任何类型的纹理&#xff0c;适用于网络摄影、印刷项目、艺术、排版等&#xff0c;让你可以更好的进行图像设计…

安全加密基础—基本概念、keytool、openssl

安全加密基础—基本概念、keytool、openssl 目录 前言 一、概念 明文通信 无密钥密文通信 对称加密 非对称加密 数字签名 消息摘要(MD5) CA数字证书(解决公钥分发的问题) HTTPS 相关文件扩展名 常用后缀名 普通的pem文件内容 二、keytool 2.1常用的命令如下 2…

网络优化篇(一)---------TCP重传性能优化

本文通过一个TCP重传优化的实际问题,详细讲解问题的分析、定位、优化过程。 通过本文你将学到: 如何通过linux命令和/proc文件系统分析TCP性能数据如何通过linux命令和netlink api分析某个具体的TCP连接的性能数据如何通过bcc工具分析TCP性能数据如何通过调整系统参数优化TCP重…

第1章 线性回归

一、基本概念 1、线性模型 2、线性模型可以看成&#xff1a;单层的神经网络 输入维度&#xff1a;d 输出维度&#xff1a;1 每个箭头代表权重 一个输入层&#xff0c;一个输出层 单层神经网络&#xff1a;带权重的层为1&#xff08;将权重和输入层放在一起&#xff09; 3、…

从零开始C++精讲:第一篇——C++入门

文章目录 前言一、C关键字二、命名空间2.1引子2.2命名空间定义2.3命名空间的使用 三、C输入和输出3.1输出3.2输入 四、缺省参数4.1全缺省4.2半缺省 五、函数重载5.1重载概念 六、引用6.1定义6.2引用的使用示例6.2.1引用作参数6.2.1引用作返回值 6.3传值、传引用效率比较6.4常引…

真空引水罐 虹吸抽水机 负压虹吸罐 农业灌溉工作原理动画介绍

​ 1&#xff1a;真空引水罐虹吸抽水机虹吸罐介绍 真空引水罐是一种水泵吸水设备&#xff0c;也被称为真空罐、吸水罐或自动引水装置。它是一个密封的罐体&#xff0c;被串联在泵前的吸水管上&#xff0c;能够使水泵的吸水口从负压吸水变为正压吸水。使用真空引水罐可以节省真…

彻底解决vue-video-player视频铺满div

需求 最近需要接入海康视频摄像头&#xff0c;然后把视频的画面接入到自己的网站系统中。以前对接过rtsp固定IP的显示视频&#xff0c;这次的不一样&#xff0c;没有了固定IP。海康的解决办法是&#xff0c;摄像头通过配置服务器到萤石云平台&#xff0c;然后购买企业版账号和…

解决vue3中watch 监听不到旧值的问题,亲测有效!

问题描述 这个问题是我在公司vue3项目的时候发现的一个问题&#xff0c;watch 在监听对象/数组变量的变化时&#xff0c;发现对象的数据变化时 旧数据 获取到的和新数据是一样的 类似于下面这样 const objref({a:我是原来的值,b:6, })obj.a改变值watch(obj,(nel,old)>{ c…

关于曲率、曲率半径和曲率圆,看这几篇文章就够啦

关于曲率、曲率半径和曲率圆的内容&#xff0c;是考研数学数学一和数学二大纲中明确要求掌握的内容&#xff0c;但这部分内容在很多教材教辅以及练习题中较少涉及。在本文中&#xff0c;荒原之梦考研数学网就为大家整理了曲率、曲率半径和曲率圆方程相关的概念、基础知识以及练…

无心剑七绝《译无止境》

七绝译无止境 人生跌宕几春秋 苦辣酸甜永不休 只待通灵成妙译 神思曼舞醉琼楼 2024年1月6日 平水韵十一尤平韵 无心剑的这首《译无止境》以七言绝句的形式&#xff0c;表达了对翻译事业的热爱和追求。 首句“人生跌宕几春秋”&#xff0c;意味着人生的曲折变化&#xff0c…

2024/1/7周报

文章目录 摘要Abstract文献阅读题目引言贡献相关工作Temporal RecommendationSequential Recommendation 方法Problem FormulationInput EmbeddingSelf-Attention StructureModel Training 实验数据集实验过程实验结果 深度学习Self-attention多头机制堆叠多层 总结 摘要 本周…