c语言:字符函数和字符串函数

代码见:登录 - Gitee.com

1. 字符分类函数

在c语言中专门做字符分类,并确定字符是属于什么类型的函数。

需要的头文件:#include <ctype.h>

举例:

1.1模拟实现

练习:将字符串中的小写字母转大写,其余不变:

2. 字符转换函数

c语言提供两个字符转换函数:

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

使用库函数完成相同操作,可以跨平台操作,更方便。

3. strlen的使用和模拟实现

函数原型:

复制代码
size_t strlen ( const char * str );
功能:统计参数 str 指向的字符串的⻓度。统计的是字符串中 '\0' 之前的字符的个数。
参数,str :指针,指向了要统计⻓度的字符串。
返回值:返回了 str 指向的字符串的⻓度,返回的⻓度不会是负数,所以返回类型是 size_t 。

注意:

1.字符串以 '\0' 作为结束标志,strlen函数返回的是在字符串中 '\0' 前⾯出现的字符个数(不包含 '\0' )。

2.参数指向的字符串必须要以 '\0' 结束。

3.函数的返回值为 size_t ,是无符号的

4.strlen的使用需要包含头文件<string,h>

3.1strlen返回值与模拟实现

3.2strlen模拟实现

先前几章,使用strlen写计数器以及完成指针-指针的操作:

今天再进阶:不创建临时变量,使用递归

4. strcpy的使用和模拟实现

函数原型:

复制代码
char* strcpy(char * destination, const char * source );

头文件:#include<string.h>
功能:字符串拷⻉,拷⻉到源头字符串中的 \0 为⽌
参数:
destination :指针,指向⽬的地空间
source :指针,指向源头数据
返回值:
strcpy 函数返回的⽬标空间的起始地址

注意:

1.源字符串必须以 '\0' 结束。

2.会将源字符串中的 '\0' 拷贝到目标空间。

3.目标空间必须足够⼤,以确保能存放源字符串。

4.目标空间必须可修改。

4.1模拟实现

5. strcat的使用和模拟实现

函数原型:

复制代码
char * strcat ( char * destination, const char * source );

头文件:#include <string.h>
功能:字符串追加,把 source 指向的源字符串中的所有字符都追加到 destination 指向的空间中。
参数:
destination :指针,指向⽬的地空间
source :指针,指向源头数据
返回值:
strcat 函数返回的⽬标空间的起始地址

注意:

1.源字符串必须以 '\0' 结束。

2.目标字符串中也得有 \0 ,否则没办法知道追加从哪里开始。

3.目标空间必须有足够的大,能容纳下源字符串的内容。

4.目标空间必须可修改。

5.1模拟实现

6. strcmp的使用和模拟实现

函数原型:

复制代码
int strcmp ( const char * str1, const char * str2 );

头文件:#include <string.h>
功能:⽤来⽐较 str1 和 str2 指向的字符串,从两个字符串的第⼀个字符开始⽐较,如果两个字符
的ASCII码值相等,就⽐较下⼀个字符。直到遇到不相等的两个字符,或者字符串结束。
参数:
str1 :指针,指向要⽐较的第⼀个字符串
str2 :指针,指向要⽐较的第⼆个字符串
返回值:
标准规定:
第⼀个字符串⼤于第⼆个字符串,则返回⼤于0的数字
第⼀个字符串等于第⼆个字符串,则返回0
第⼀个字符串⼩于第⼆个字符串,则返回⼩于0的数字

6.1strcmp模拟实现

7. strncpy函数的使用

函数原型:

复制代码
char * strncpy ( char * destination, const char * source, size_t num );

功能:字符串拷⻉;将 source 指向的字符串拷⻉到 destination 指向的空间中,最多拷⻉ num个字符。
参数:
destination :指针,指向⽬的地空间
source :指针,指向源头数据
num :从source指向的字符串中最多拷⻉的字符个数
返回值:
strncpy 函数返回的⽬标空间的起始地址

7.1比较strcpy和strncpy函数

strcpy函数拷贝到\0为止,如果目标空间不够,容易出现越界。

strncpy函数指定拷贝长度,源字符串不一定要有\0,同时会判断目标空间大小是否够用,相对更安全。

8. strncat函数的使用

函数原型:

复制代码
char * strncat ( char * destination, const char * source, size_t num );
功能:字符串追加;将 source 指向的字符串的内容,追加到 destination 指向的空间,最多追加 num 个字符。
参数:
destination :指针,指向了⽬标空间
source :指针,指向了源头数据
num :最多追加的字符的个数
返回值:返回的是⽬标空间的起始地址

8.1strcat和strncat对比

1.strncat 多⼀个参数

2.strcat 函数在追加的时候要将源字符串的所有内容,包含 \0 都追加过去,但是 strncat 函数指定追加的长度。

3.strncat 函数中源字符串中不⼀定要有 \0 。

4.strncat 更灵活,更安全。

9. strncmp函数的使用

函数原型:

复制代码
int strncmp ( const char * str1, const char * str2, size_t num );
功能:字符串⽐较;⽐较 str1 和 str2 指向的两个字符串的内容,最多⽐较 num 字符。
参数:
str1 :指针,指向⼀个⽐较的字符串
str2 :指针,指向另外⼀个⽐较的字符串
num :最多⽐较的字符个数
返回值:
标准规定:
第⼀个字符串⼤于第⼆个字符串,则返回⼤于0的数字
第⼀个字符串等于第⼆个字符串,则返回0
第⼀个字符串⼩于第⼆个字符串,则返回⼩于0的数字

10. strstr的使用和模拟实现

函数原型:

复制代码
char * strstr ( const char * str1, const char * str2);
功能:
strstr 函数,查找 str2 指向的字符串在 str1 指向的字符串中第⼀次出现的位置。
简⽽⾔之:在⼀个字符串中查找⼦字符串。
strstr 的使⽤得包含<string.h>
参数:
str1 :指针,指向了被查找的字符串
str2 :指针,指向了要查找的字符串
返回值:
如果str1指向的字符串中存在str2指向的字符串,那么返回第⼀次出现位置的指针
如果str1指向的字符串中不存在str2指向的字符串,那么返回NULL

10.1模拟实现

11. strtok函数的使用

函数原型:

复制代码
char *strtok(char *str, const char *delim);
功能
分割字符串:根据delim 参数中指定的分隔符,将输⼊字符串str 拆分成多个⼦字符串。
修改原始字符串: strtok 会直接在原始字符串中插⼊'\0' 终⽌符,替换分隔符的位置,因此原始字符串会被修改。
参数
1. str :⾸次调⽤时传⼊待分割的字符串;后续调⽤传⼊NULL ,表⽰继续分割同⼀个字符串。
2. delim :包含所有可能分隔符的字符串(每个字符均视为独⽴的分隔符)。
返回值
• 成功时返回指向当前⼦字符串的指针。
• 没有更多⼦字符串时返回NULL 。
使⽤步骤
1. ⾸次调⽤:传⼊待分割字符串和分隔符。
2. 后续调⽤:传⼊NULL 和相同的分隔符,继续分割。
3. 结束条件:当返回NULL 时,表⽰分割完成。

11.1模拟实现

12. strerror函数的使用

此函数,可以将错误码对应的错误信息字符串的地址返回。

函数原型:

复制代码
char* strerror ( int errnum );
功能:
1. strerror 函数可以通过参数部分的errnum 表⽰错误码,得到对应的错误信息,并且返回这个错误信息字符串⾸字符的地址。
2. strerror 函数只针对标准库中的函数发⽣错误后设置的错误码的转换。
3. strerror 的使⽤需要包含<string.h>
参数:
errnum :表⽰错误码
这个错误码⼀般传递的是 errno 这个变量的值,在C语⾔有⼀个全局的变量叫: errno ,当库函数的调⽤发⽣错误的时候,就会讲本次错误的错误码存放在 errno 这个变量中,使⽤这个全局变量需要包含⼀个头⽂件 errno.h 。
返回值:
函数返回通过错误码得到的错误信息字符串的⾸字符的地址。

12.1perror

可以将错误码直接打印出来,perror 函数打印完参数部分的字符串后,再打印⼀个冒号和⼀个空格,再打印错误信息。

函数原型:

复制代码
void perror ( const char * str );
相关推荐
遇见尚硅谷32 分钟前
C语言:游戏代码分享
c语言·开发语言·算法·游戏
小刘|1 小时前
单例模式详解
java·开发语言·单例模式
超浪的晨1 小时前
Java 内部类详解:从基础到实战,掌握嵌套类、匿名类与局部类的使用技巧
java·开发语言·后端·学习·个人开发
晓13131 小时前
JavaScript加强篇——第八章 高效渲染与正则表达式
开发语言·前端·javascript
阳光开朗_大男孩儿1 小时前
nfs 锁机制demo
开发语言·多线程·多进程·文件锁
Hello-Mr.Wang2 小时前
使用Spring Boot和PageHelper实现数据分页
java·开发语言·spring boot
Jess072 小时前
归并排序递归法和非递归法的简单简单介绍
c语言·算法·排序算法
追风赶月、2 小时前
【QT】使用QSS进行界面美化
开发语言·qt
佩奇大王2 小时前
java 接口
java·开发语言
CodeWithMe2 小时前
【读书笔记】《C++ Software Design》第十章与第十一章 The Singleton Pattern & The Last Guideline
开发语言·c++·设计模式