C语言字符函数与字符串函数的实现示例

 更新时间:2024年11月05日 11:20:03   作者:爱编程的小新☆  
C语言标准库中的<ctype.h>和<string.h>头文件分别提供了丰富的字符处理和字符串处理函数,本文就来介绍一下C语言字符函数与字符串函数的实现示例,感兴趣的可以了解一下

1. 字符函数

在C语言标准库中提供了一系列用于处理字符的函数,这些函数定义在 <ctype.h>头文件中。

字符函数分为两种:字符分类函数和字符转换函数

1.1 字符分类函数

C语⾔中有⼀系列的函数是专⻔做字符分类的,也就是⼀个字符是属于什么类型的字符。

例如:islower函数是判断参数部分是否为小写字母,如果是小写字母就返回非0的数字,如果不是小写字母就返回0

#include<stdio.h>
#include<ctype.h>
int main()
{
	char c = 'A';
	int ret = islower(c);
	printf("%d", ret);
	return 0;
}

运行结果:

练习:写⼀个代码,将字符串中的⼩写字⺟转⼤写,其他字符不变

#include<stdio.h>
#include<ctype.h>
int main()
{
	char str[] = "hello world";
	int i = 0;
	while (str[i])
	{
		if (islower(str[i]))
		{
			str[i] = str[i] - 32;
		}
		i++;
	}
	printf("%s", str);
	return 0;
}

运行结果:

对于剩余的字符分类函数,大家可以手动进行尝试一下,这里就不在进行详细介绍啦

1.2 字符转换函数

C语⾔提供了2个字符转换函数:

tolower ( c ); //将参数传进去的⼤写字⺟转⼩写
toupper ( c ); //将参数传进去的⼩写字⺟转⼤写

tolower函数示例:

#include<stdio.h>
#include<ctype.h>
int main()
{
	char c=tolower('A');
	printf("%c", c);
	return 0;
}

 

toupper函数示例:

#include<stdio.h>
#include<ctype.h>
int main()
{
	char c=toupper('a');
	printf("%c", c);
	return 0;
}

学习完字符转换函数后,我们将上面练习的代码进行改造一下:

int main()
{
	char str[] = "hello world";
	int i = 0;
	while (str[i])
	{
		if (islower(str[i]))
		{
			str[i] = toupper(str[i]);
		}
		i++;
	}
	printf("%s", str);
	return 0;
}

上⾯的代码,我们将⼩写转⼤写,是-32完成的效果,有了转换函数,就可以直接使⽤ tolowe函数。

2. 字符串函数

在C语言标准库中的<string.h>头文件中提供了一系列用于处理字符串的函数,这些函数用于字符串的复制、连接、比较、搜索、分割等操作。

下面介绍一些C语言中常用的字符串函数

2.1 strlen 函数

strlen函数是用来计算参数(字符串)长度的(不包括终止的空字符 \0 )

strlen函数的注意事项:

  • 字符串以 '\0' 作为结束标志,strlen函数返回的是在字符串中 '\0' 前⾯出现的字符个数(不包    含 '\0' )。
  • 参数指向的字符串必须要以 '\0' 结束。
  • 注意函数的返回值为 size_t,是⽆符号的( 易错 )
  •  strlen的使⽤需要包含头⽂件

strlen函数的使用:

注意这里的初始化方式会在 str字符数组默认最后加上一个 \0,如果用另一种初始化方式会出现什么现象呢?

为什么这里计算str字符数组的长度是74呢?因为这里的初始化方式是不会自动补上 \0,所以strlen函数会根据地址一直往后找,直到找到 \0,所以这里的 74 实际上是一个随机值。

此时我们在数组的末尾加上 \0 这时候strlen函数计算的结果就是 \0前面的字符个数。 

2.2 strcpy 函数

strcpy函数会将源指向的字符串复制到目标指向的数组中,包括终止的空字符(并在该点停止)

strcpy函数的注意事项: 

  • destination指向字符串复制到的数组,source指向要复制的字符串
  • 源字符串必须以 '\0' 结束。
  • 会将源字符串中的 '\0' 拷⻉到⽬标空间。
  • ⽬标空间必须⾜够⼤,以确保能存放源字符串。(否则会出现栈帧空间溢出的现象)
  • ⽬标空间必须可修改。

例如:

2.3 strcat 函数

strcat函数是将字符串source连接到destination的末尾(包括终止的空字符 \0)

strcat函数的注意事项:

  • 源字符串必须以 '\0' 结束。
  • ⽬标字符串中也得有 \0 ,否则没办法知道追加从哪⾥开始。
  • ⽬标空间必须有⾜够的⼤,能容纳下源字符串的内容。
  • ⽬标空间必须可修改。

例如:

注意这里被追加的目标空间必须保证足够大,否则也会出现栈帧空间溢出的现象

那么strcat函数是否可以自己追加自己呢?其实是可以的,但是一般不会这样使用,使用不当很容易造成死循环的问题 ,对于自己追加自己,我们一般使用strncat函数,在下面我们将会了解到strncat函数。

2.4 strcmp 函数

strcmp函数是用于两个字符串进行比较的

  • 如果第⼀个字符串⼤于第⼆个字符串,则返回⼤于0的数字
  • 如果第⼀个字符串等于第⼆个字符串,则返回0
  • 如果第⼀个字符串⼩于第⼆个字符串,则返回⼩于0的数字 

例如:

2.5 strncpy 函数

strncpy和strcpy是非常相似的,strncpy在参数部分加上了复制的字节个数(size_t  num)

用法与strcpy也是一模一样的,只是这时候可以由我们操控复制多少个字节(num)到目标位置。

例如:

注意:如果源字符串的⻓度⼩于num,则拷⻉完源字符串之后,在⽬标的后边追加0,直到num个。 

2.6 strncat 函数

对比strcat函数,strncat函数在参数部分也多了一个(size_t num)追加的字节个数

例如:

这时候就可以自己操控自己想要追加的内容了

注意:如果source 指向的字符串的⻓度⼩于num的时候,只会将字符串中到 \0 的内容追加到destination指向的字符串末尾

例如:

2.7 strncmp 函数

对比strcmp函数,strncmp函数在参数部分也多了一个(size_t num)比较的字节个数

⽐较str1和str2的前num个字符,如果相等就继续往后⽐较,最多⽐较num个字⺟,如果提前发现不⼀ 样,就提前结束,⼤的字符所在的字符串⼤于另外⼀个。如果num个字符都相等,就是相等返回0

例如:

 此时只是比较的str1和str2中的前3个字符,前三个字符相等所以返回值为0

2.8 strstr 函数

strstr函数的作用是在一个字符串(str1)中查找第一次出现的子字符串(str2),并返回指向该子字符串的指针,如果没有找到子字符串,则返回NULL(空指针)

例如:

结语

以上就是C语言中常见的字符函数以及字符串函数,到此这篇关于C语言字符函数与字符串函数的实现示例的文章就介绍到这了,更多相关C语言字符函数与字符串函数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 深入浅出理解C语言初识结构体

    深入浅出理解C语言初识结构体

    C 数组允许定义可存储相同类型数据项的变量,结构是 C 编程中另一种用户自定义的可用的数据类型,它允许你存储不同类型的数据项,本篇让我们来了解C 的结构体
    2022-02-02
  • QT TCP实现简单的通信示例

    QT TCP实现简单的通信示例

    这篇文章主要为大家详细介绍了QT TCP简单的通信示例,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • QT调用vs2019生成的c++动态库的方法实现

    QT调用vs2019生成的c++动态库的方法实现

    本文主要介绍了QT调用vs2019生成的c++动态库的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-06-06
  • 使用c++11 constexpr时遇到的坑详解

    使用c++11 constexpr时遇到的坑详解

    c++11 constexpr将变量声明为constexpr类型以便由编译器来验证变量是否是一个常量表达式,这篇文章主要给大家介绍了关于使用c++11 constexpr时遇到的坑,需要的朋友可以参考下
    2021-05-05
  • C语言实现猜数字小游戏的示例代码

    C语言实现猜数字小游戏的示例代码

    猜数字小游戏是我们小时候喜欢我们一个经典小游戏。这篇文章将利用C语言中的循环语句、分支语句和函数实现这一游戏,需要的可以参考一下
    2022-10-10
  • 解析C++中的字符串处理函数和指针

    解析C++中的字符串处理函数和指针

    这篇文章主要介绍了解析C++中的字符串处理函数和指针,是C++入门学习中的基础知识,需要的朋友可以参考下
    2015-09-09
  • C++中for auto的用法及说明

    C++中for auto的用法及说明

    这篇文章主要介绍了C++中for auto的用法及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • C++实现拓扑排序(AOV网络)

    C++实现拓扑排序(AOV网络)

    这篇文章主要为大家详细介绍了C++实现拓扑排序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04
  • C++超详细讲解RTTI和cast运算符的使用

    C++超详细讲解RTTI和cast运算符的使用

    RTTI(Runtime Type Identification)是“运行时类型识别”的意思。C++引入这个机制是为了让程序在运行时能根据基类的指针或引用来获得该指针或引用所指的对象的实际类型,cast强制转换运算符是一种特殊的运算符,它把一种数据类型转换为另一种数据类型
    2022-08-08
  • 基于atoi()与itoa()函数的内部实现方法详解

    基于atoi()与itoa()函数的内部实现方法详解

    本篇文章是对atoi()与itoa()函数的内部实现方法进行了详细的分析介绍,需要的朋友参考下
    2013-05-05

最新评论