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

【C语言】字符函数与字符串函数

一、前言

在C语言中学到的int、double等类型我相信大家理解与运用起来都相当的不错,但是我也在学校中发现许多的同学对于字符与字符串的了解还是不太够的,可以说用起来还是有一些别扭,有时候自己对字符数组操作起来还是有很多的错误,这也是需要提升的,当然在C语言的库中也提供了一些关于字符、字符串的操作函数,这可以大大的帮助我们对字符进行管理


二、字符函数

C语言 ctype.h 库中有着许多的字符函数,下面我们挑选一些来学习

1. 字符分类函数

我们都知道许多的字符都有一个ASCII码值,我们可以根据ASCII码值找到这个符号或者对这个符号进行修改、判断这个符号属性,如:大写字母、小写字母、数字等
在这里插入图片描述

#include <stdio.h>

int main() {
	char ch_Input = 0;
	scanf("%c", &ch_Input);
	if (ch_Input >= 97 && ch_Input <= 122) {
		printf("小写字母\n");
	}

	return 0;
}

在这里插入图片描述
如上我们通过了ASCII码值比较可以判断是否是一个小写字母,但是这样写很麻烦,所有我们可以直接调用ctype.h库中的字符分类函数来判断一个字符的类型,下面我们列举一下字符分类函数

函数名作用
iscntrl任何控制字符
isspace空白字符:空格’',换页“\f” 、换行“\n”、回车“\r” 、制表符“\t”、垂直制表符“\v”
isdigit十进制数字 ‘1’ ~ ‘9’ 的字符
isxdigit十六进制数字:包括所以十进制数字、小写字母’a’ ~ ‘f’、大写字母’A’ ~ ‘F’
islower小写字母’a’ ~ ‘z’
isupper大写字母’A’ ~ ‘Z’
isalpha字母(‘a’ ~ ‘z’ 或 ‘A’ ~ ‘Z’)
isalnum字母或数字(‘a’ ~ ‘z’ 或 ‘A’ ~ ‘Z’ 或 ‘1’ ~ ‘9’)
ispunct标点符号(任何不属于数字或字母的可打印图形)
isgraph任何图形符号
isprint可打印字符,包括图形字符和空白符
#include <stdio.h>
#include <ctype.h>

int main() {
	char ch_Input = 0;
	scanf("%c", &ch_Input);
	if (isalpha(ch_Input)) {
		printf("字母!\n");
	}
	if (islower(ch_Input)) {
		printf("小写字母!\n");
	}
	return 0;
}

在这里插入图片描述
其他字符函数的使用方式大同小异,这里就不一一展示了


2. 字符替换函数

#include <stdio.h>

int main() {
	char ch_a = 'a';
	char ch_A = ch_a - 32;
	printf("%c\n", ch_A);

	return 0;
}

在这里插入图片描述
如上,我们可以通过操作ASCII码值对ch_a的ASCII值进行运算得到A字符的ASCII码值,实现大小写之间的转换,同样的我们也有字符替换函数实现这一功能

函数名作用
tolower大写转小写
toupper小写转大写

tolower 与 toupper 的形参与返回值都是整型

#include <stdio.h>
#include <ctype.h>

int main() {
	char arr[] = "Hello World!";
	char* tmp_ch = arr;
	while (*tmp_ch) {
		*tmp_ch = toupper(*tmp_ch);
		tmp_ch++;
	}
	printf("%s\n", arr);

	return 0;
}

在这里插入图片描述
上面是把字符串中的小写字母转换为大写字母的代码,同时我们也可以看出,toupper函数会检查传入的数值是否是小写字母,不然不会进行转换


三、字符串函数

上面所说的字符函数是对单个字符进行操作,但是字符串函数则是对字符串也就是字符数组进行操作的,比如获取字符串长度,拼接字符串,分割字符串等等,而字符串函数位于string.h函数中

1. strlen函数(求字符串长度)

我们知道在C语言中使用字符数组来储存一个字符串,但是我们如果需要知道我们要去遍历一遍这一个数组,才有可能得到字符串的长度,如下:

#include <stdio.h>

int main() {
	char arr[] = "Hello World!";
	int i = 0;
	while (arr[i]) {
		i++;
	}

	printf("长度为%d\n", i);
	return 0;
}

在这里插入图片描述
这里我们使用i对数组进行了遍历,得到了数组的长度,但是这样我们写的代码时十分的多的,所以我们可以使用strlen函数

#include <stdio.h>
#include <string.h>

int main() {
	char arr[] = "Hello World!";
	printf("字符串长度为:%zd\n", strlen(arr));

	return 0;
}

在这里插入图片描述
注:
strlen函数遍历数组的结束标志为’\0’,若是字符串中没有’\0’则strlen函数不会停止计数,直到寻找到’\0’


2. strcpy函数(字符串拷贝)

strcpy函数可以将一个字符串拷贝到另一个字符串,前提是目的字符串的长度必须是足够的,不然拷贝会出现问题!

#include <stdio.h>
#include <string.h>

int main() {
	char arr1[] = "HelloWorld!";
	char arr2[15] = { 0 };
	
	strcpy(arr2, arr1);
	printf("%s\n", arr2);

	return 0;
}

在这里插入图片描述
我们可以看到字符串已经拷贝完成

strcpy会将 \0 一起拷贝过去吗?

在这里插入图片描述
通过代码调试,我们可以发现strcpy在拷贝函数时会将 \0 也拷贝过去

strcpy的注意事项:

  • 源字符串必须以’\0’ 结束
  • 会将源字符串中的’\0’ 拷贝到目标空间
  • 目标空间必须足够大,以确保能存放源字符串
  • 目标空间必须可修改

3. strcat函数(字符串追加)

关于strcat函数使用的几个要点:

  • 源字符串必须以’\0’ 结束
  • 目标字符串中也得有\0 ,否则没办法知道追加从哪里开始
  • 目标空间必须有足够的大,能容纳下源字符串的内容
  • 目标空间必须可修改

源字符串就是要追加的内容,而目标字符串就是要进行尾部追加的字符串,strcat函数需要寻找到目标字符串的尾部也就是\0才能进行追加

#include <stdio.h>
#include <string.h>

int main() {
	char arr1[13] = "Hello";
	char arr2[8] = " World!";

	printf("追加前:%s\n", arr1);
	strcat(arr1, arr2);
	printf("追加后:%s\n", arr1);

	return 0;
}

在这里插入图片描述


4. strcmp函数(字符串大小比较)

字符串的大小比较并不是一整个整体的所占空间的大小比较,而是字符串会把两个字符串的对位字母比较,直到他们不相同

#include <stdio.h>
#include <string.h>

int main() {
	char arr1[] = "HelloWorld!";
	char arr2[] = "HalloWorld!";

	if (strcmp(arr1, arr2) > 0) {
		printf("arr1大\n");
	}


	return 0;
}

在这里插入图片描述

在这里插入图片描述
strcmp函数使用细节:

  • 第一个字符串大于第二个字符串,则返回大于0的数字
  • 第一个字符串等于第二个字符串,则返回0
  • 第一个字符串小于第二个字符串,则返回小于0的数字
  • strcmp函数大小比较依据是ASCII码值

5. strstr函数(寻找子字符串)

strstr函数用于寻找字符串函中是是否有特定的子字符串

char *strstr(const char *haystack, const char *needle);
  • haystack:需要被搜索的主字符串(目标字符串)。
  • needle:需要在主字符串中查找的子字符串。

返回值

  • 如果在 haystack 中找到了 needle,则返回指向 haystack 中首次出现 needle 的位置的指针
  • 如果未找到 needle,则返回空指针 NULL
#include <stdio.h>
#include <string.h>

int main() {
	char arr[] = "Hello World!";
	char Find[] = "Hello";
	if (strstr(arr, Find)) {
		printf("找到了!\n");
	}

	return 0;
}

在这里插入图片描述


四、End

对于常用的字符串就介绍到这里了,谢谢大家的阅读,希望对大家有所帮助!


http://www.kler.cn/a/519227.html

相关文章:

  • 第 25 场 蓝桥月赛
  • 硬件学习笔记--35 AD23的使用常规操作
  • ThreeJS示例教程200+【目录】
  • 微信小程序date picker的一些说明
  • 積分方程與簡單的泛函分析8.具連續對稱核的非齊次第II類弗雷德霍姆積分算子方程
  • 【探索 Kali Linux】渗透测试与网络安全的终极操作系统
  • 探寻 UTF - 8 和 GBK 的编码 “黑匣子”
  • 关注搜索引擎蜘蛛压力
  • vim 中粘贴内容时提示: -- (insert) VISUAL --
  • 【YOLOv11改进- 主干网络】YOLOv11+MobileNetV2(2018): 相比于 MobileNetV1 而言准确率更高,模型更小;
  • 【Linux】列出所有连接的 WiFi 网络的密码
  • 《Kotlin核心编程》下篇
  • 安装环境pytorch
  • centos7 配置国内镜像源安装 docker
  • 【分布式日志篇】从工具选型到实战部署:全面解析日志采集与管理路径
  • 使用 Pipeline 提高 Redis 批量操作性能
  • Java 反射机制:春招面试中的关键知识点
  • 【模型】RNN模型详解
  • w178智能学习平台系统设计与实现
  • 景联文科技加入AIIA联盟数据标注分委会
  • Linux的常用指令的用法
  • java定时任务备份数据库
  • php-phar打包避坑指南2025
  • 电梯系统的UML文档10
  • Redis-缓存
  • unity导入图片素材注意点和AI寻路模块导入