当前位置: 首页 > news >正文

(超详细)字符函数和字符串函数【上】

前言

C 语言中对字符和字符串的处理很是频繁,但是 C 语言本身是没有字符串类型的,字符串通常放在
常量字符串 中或者 字符数组 中。
字符串常量 适用于那些对它不做修改的字符串函数 .

1.求字符串长度函数

strlen函数

我们要求一个字符串函数的长度,strlen通常是我们的第一选择,它被包含在string.h头文件中,我们以下要介绍的字符函数和字符串函数都被包含在这个头文件中,这个函数的声明为:

size_t strlen ( const char * str );

为什么它的返回类型是size_t呢,首先我们要知道size_t是无符号整型类型,因为我们字符的长度不可能是负数,所以我们的返回值选择用无符号整型,那么这个函数内部是如何实现的呢?

我们写一段代码演示:

#include<stdio.h>
#include<string.h>
int main()
{char arr[] = "abcdef";size_t sz = strlen(arr);printf("%zd\n", sz);return 0;
}

我们来看结果:

 

一个字符串的末尾隐藏着一个\0,strlen就是通过一个一个字符记数,找到\0后就停下然后返回那个记数的值,画图演示:

strlen函数从a开始走,只要没遇到\0就一直往后走,走一个字符记数加一,直到遇到\0时,他就停止向后走,函数工作结束并返回那个记数的值。

注意事项:
1.字符串已经 '\0' 作为结束标志, strlen 函数返回的是在字符串中 '\0' 前面出现的字符个数(不包
'\0' )
2. 参数指向的字符串必须要以 '\0' 结束。
3.注意函数的返回值为 size_t ,是无符号的( 易错 )。

总结:strlen函数是一个求字符串长度的函数,内部的工作原理是只要不遇到\0就一直向后走并记数,遇到\0就停下。

2.长度不受限制的字符串函数

strcpy函数

strcpy是用来将一个字符串复制到另一个数组的函数,函数声明为:

char* strcpy(char * destination, const char* sourse)

因为我们要从一个数组中复制字符串到另一个数组中,所以用两个字符指针接收它们的首地址,sourse指向的函数是不需要改变它里面的值的,所以我们用const来修饰它,防止有人改变它的值,增加程序的鲁棒性,在复制完内容后,我们把接收了字符串的那个数组的首地址返回,代码演示:

int main()
{char arr1[] = "abcdef";char arr2[20] = { 0 };strcpy(arr2, arr1);printf("%s\n", arr2);return 0;
}

我们来看一下结果:

 

使用strcpy函数,arr1数组中的字符串很轻松就被复制到了arr2数组中,但是函数也有一些注意事项需要遵守,否则会出现一些无法预知的问题 。

注意事项:

1.源数组字符串必须以\0结尾。

2.目标数组空间必须足够大,能够放得下源字符串的内容。

3.目标空间必须可变。

总结:strcpy是一个复制字符串的函数

stract函数

stract函数的功能是将一个字符串复制到另一个字符串的结尾,使得到字符内容的字符串变长,函数声明为:

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

它的函数声明与strcpy函数一样,就不过多介绍了,假设我们要进行这样的操作,用代码演示:

int main()
{char arr1[20] = "abcdrf";char arr2[] = "wed";strcat(arr1, arr2);printf("%s\n", arr1);return 0;
}

代码中表示我们要将arr2数组中的内容放到arr1数组的结尾:

 

我相信通过代码的演示大家已经了解了strct函数的使用,这里还有使用此函数的一些注意事项。

注意事项: 
1.源字符串必须以 '\0' 结束。
2.目标空间必须有足够的大,能容纳下源字符串的内容。
3.目标空间必须可修改。

strcmp函数

strcmp是字符串比较函数,使用它可以对两个字符串比较,在排序等情况中可以使用此函数,我们来看看这个函数的声明吧:

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

在介绍它的函数声明之前,我们先介绍这个函数的工作原理。我们向strcmp函数放入两个数组的首地址 ,它会对两个字符串的字符进行比较,如果相等就往后比,只要有一位分出大小,就会分出大小,假设我们有一个字符串abcdef和另一个abcq使用strcmp函数进行比较前三位都是abc,所以会往下比,当比到第四位时,是d和q进行比较,c的ascall码为99,q的ascall码为112,当有一位字符比出大小时,就会判定abcq比abcdef大,因为abcdef在前,所以函数判定的结果是小于,返回小于0的数字,如果比到最后,两个字符串都一样,则返回0,如果前面那个字符串比后面那个字符串大,则返回一个大于0的数字。

现在我们再看函数声明,也不难理解这个函数的两个参数是指针,用来接收两个数组的首地址,因为只要比较它们的值,不需要改变它们的值,所以用const修饰。

例如我们要比较两个数组中的字符串,我们用代码演示:

int main()
{char arr1[20] = "abcdrf";char arr2[] = "abcq";int ret=strcmp(arr1, arr2);printf("%d\n", ret);return 0;
}

看结果怎么样: 

函数判定abcdef比abcq小,所以返回了一个小于0的数字。

标准规定: 
1.第一个字符串大于第二个字符串,则返回大于 0 的数字
2.第一个字符串等于第二个字符串,则返回 0
3.第一个字符串小于第二个字符串,则返回小于 0 的数字
未完待续。。。。。。

 

 

 

 

 

 

http://www.lryc.cn/news/357341.html

相关文章:

  • AUS GLOBAL 荣获 Brokersview 颁奖盛典多项殊荣
  • Spring Aop 实现对mapper层入参进行重新赋值
  • 朗读亭主要作用有哪些?
  • 力扣:226. 翻转二叉树
  • 深入解析 JSONPath:从入门到精通
  • Python算法设计与分析期末
  • pg_lakehouse 与 datafusion
  • 基于51单片机的酒精浓度检测仪的设计
  • 重生之 SpringBoot3 入门保姆级学习(02、打包部署)
  • Java-常用模块
  • c++大作业 调整字幕的时间
  • Nmap使用方法
  • 任务3.1:采用面向对象方式求三角形面积
  • 解读《互联网政务应用安全管理规定》网络和数据安全中的身份认证和审计合规建设
  • HTML-JavaWeb
  • 数组-检查数组内是否存在和为7的倍数的子序列
  • 【图像处理与机器视觉】图像处理概述与像素
  • 虚函数的性能消耗到底在哪?
  • Visual Studio 的使用
  • Web前端与App前端:深入剖析两者的异同
  • 初学者必读:Midjourney AI创作工具的简易使用手册!
  • 使用python绘制一个五颜六色的爱心
  • 关于锂电池短路测试
  • 排序(前篇)
  • Linux学习笔记(二)
  • Git——pull request详细教程
  • Prompt工程与实践
  • 电脑录屏怎么录?7个电脑录屏软件免费版强势来袭,赶快收藏!
  • ts: 映射类型
  • 调出idea解决冲突界面