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

字符串函数详解

一.字母大小写转换函数.

1.1.tolower

结合cppreference.com

有以下结论:

1.头文件为#include <ctype.h>

2.使用规则为 

#include <stdio.h>
#include <ctype.h>
int main()
{
	char ch = 'A';
	printf("%c\n",tolower(ch));//大写转换为小写
	return 0;
}

3.用于大写转换为小写.

1.2.toupper

 结合cppreference.com

有以下结论:

1.头文件为#include <ctype.h>

2.使用规则:

#include <stdio.h>
#include <ctype.h>
int main()
{
	
	char ch = 'a';
	int ch2 = 'a';
	printf("%c\n", toupper(ch));
	printf("%c\n", toupper(ch2));

	return 0;
}

注意:仔细会发现,char类型也可以实现,这是因为其在内存中也是通过ASCII码值实现的!!!

3.用于小写转换大写

二.字符串比较函数.

 结合cppreference.com

有以下结论:

1.头文件为#include <string.h>

2.规则:

定义两个字符串,我们这假设为s1,s2;如果s1<s2,返回<0;如果s1=s2;返回0;如果s1>s2,返回>0;

问题来了???咋比较?难道比较字母顺序吗?准确的说是比较ASCII码表,例如:A--65,a--97;来个题目帮助大家理解:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
int main()
{
	char arr1[] = "Hello world!";
	char arr2[] = "Hello World!";
	int result = strcmp(arr1, arr2);
	if (!result)
	{
		printf("arr1==arr2\n");
	}
	else if (result < 0)
	{
		printf("arr1<arr2\n");
	}
	else
	{
		printf("arr1>arr2\n");
	}

	return 0;
}

注意:ASCII码中大写和小写谁大???

结果如下:

三.字符串长度获取.

 结合cppreference.com

有以下结论:

1.头文件为#include <strling.h>

2.使用规则:

求字符串长度,到\0停止(不包括\0),而sizeof是包括\0的

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
int main()
{
	char arr[] = "hello world!";
	printf("%d\n", sizeof(arr));
	printf("%d\n", strlen(arr));
	return 0;
}

结果:

四.字符串连接函数

以下结论:

1.strcat函数是将两个字符数组中的字符串连接起来

2.作用是将指针src所指的字符串添加到dest指针所指的字符串的结尾处,相当与覆盖\0,并且会在整个字符的末尾添加\0,

3.注意:两个指针所指向的空间不能有重叠,并且dest指针指向的空间必须有足够大的空间来容纳src指针指向的字符串.

例如:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
int main()
{
	char dest[300] = "Hello ";//[]里面一定要确定好大小,不然缓冲区可能溢出
	char src[] = "World!";
	strcat(dest, src);
	int sz = strlen(dest);
	for (int i = 0; i < sz; i++)
	{
		printf("%c", dest[i]);
	}
	printf("\n");
	return 0;
}

五.字符串复制函数.

5.1.strcpy函数

结论如下:

1.头文件为#include <string.h>

2.使用规则:将指针src所指向字符串内容复制给dest指针所指向的字符串数组中

3.注意:

1.两个指针所指向的空间不能有重叠,并且dest指针指向的空间必须有足够大的空间来容纳src指针指向的字符串.

2.字符串数组dest必须以数组名形式出现,而src可以是字符串数组名,也可以是字符串常量

看代码:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
void Print(char* dest, int n)
{
	for (int i = 0; i < n; i++)
	{
		printf("%c", dest[i]);
	}
	printf("\n");
}
int main()
{
	char dest1[200] = { 0 };//注意空间大小
	char dest2[200] = { 0 };
	char src[] = "Hello World!";
	strcpy(dest1, src);
	strcpy(dest2, "hello world!");
	int sz1 = strlen(dest1);
	int sz2 = strlen(dest2);
	Print(dest1, sz1);
	Print(dest2, sz2);


	return 0;
}

结果:

3.赋值运算符不能将一个字符串常量或者字符串数组赋给另一个字符数组,赋值运算符只能对字符数组中的单个字符变量进行赋值!

5.2.strncpy函数

结论如下:

1.头文件为#include <string.h>

2.对比strcpy函数,strncpy函数更多的是将字符串中的一部分放入dest指针所指向的字符数组中,第三个参数就是用来实现截取作用的

看代码理解:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
int main()
{
	char dest1[200] = { 0 };
	char dest2[200] = { 0 };

	char src[] = "I love my father!  I love my mother!";
	strncpy(dest1, src, 17);
	printf("%s\n", dest1);
	strncpy(dest2, src+19, 17);
	printf("%s\n", dest2);

	return 0;
}

注意:dest数组要初始化为\0,不然可能出现乱码,原因是因为strncpy函数在复制字符串时不会自动将\0添加到目标字符串后面。

如下:

六.字符串追加字符函数.

strncat函数

结论如下:

1.头文件为#include <stdio.h>

2.使用规则:将src指针所指向的数组中至多count+1个字节数放入dest指针所指向的数组

大体上和五中的函数作用相同

最后,学习加油!!!


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

相关文章:

  • 杰发科技AC7801——ADC定时器触发的简单使用
  • pytest结合allure做接口自动化
  • React|bpmn.js|react-bpmn使用示例详解
  • Python世界:力扣题110,平衡二叉树判别,easy
  • 游戏引擎学习第19天
  • 第8章硬件维护-8.2 可维护性和可靠性验收
  • 重温《Unix设计哲学》
  • Leetcode——最长递增子序列
  • RPC实现简单解析
  • 从零开始写一个APM监控程序(一)协议
  • 机器学习算法——集成学习
  • java代码的错误
  • Vue理解01
  • 微内核操作系统
  • 【Java 进阶篇】JQuery 遍历 —— 无尽可能性的 `each` 之旅
  • CSS-列表属性篇
  • 世微 降压恒流驱动IC 景观亮化洗墙灯舞台灯汽车灯LED照明 AP5199S
  • 【MATLAB源码-第82期】基于matlab的OFDM系统载波频移偏差(CFO)估计,对比三种不同的方法。
  • 每日一练 | 华为认证真题练习Day132
  • 数据库的基本操作
  • CV计算机视觉每日开源代码Paper with code速览-2023.11.14
  • Linux Traefik工具Dashboard结合内网穿透实现远程访问
  • axios升级依赖版本后报错SyntaxError: Cannot use import statement outside a module
  • Netty传输object并解决粘包拆包问题
  • [Vue 代码模板] Vue3 中使用 Tailwind CSS + NutUI 实现侧边工具栏切换主题
  • 使用vscode的ssh进行远程主机连接