C语言—— 字符串处理

1. memcpy 复制

1.1 函数介绍

描述:

C 库函数 void *memcpy(void *str1, const void *str2, size_t n) 从存储区 str2 复制 n 个字节到存储区 str1。

参数:

  • str1 – 指向用于存储复制内容的目标数组,类型强制转换为 void* 指针。
  • str2 – 指向要复制的数据源,类型强制转换为 void* 指针。
  • n – 要被复制的字节数。

1.2用法示例

1.2.1 把数组B赋值给数组A

/*
* - 功能:转置3*3的矩阵
* - 参数:int array[3][3]
* - 返回值:成功1、失败0
* - 作者:SU
*/
Status convert(int array[3][3])
{
	int temp[3][3];
	for (char i = 0; i < 3; i++)
	{
		for (char j = 0; j < 3; j++)
		{
			temp[j][i] = array[i][j];
		}
	}
	//因为array和temp的空间是相同的所以用memcpy函数直接对它进行array=temp
	memcpy(array, temp, sizeof(int) * 3 * 3);
	return SUCCESS;//SUCCESS=1
}

所以可以看到memcpy可以把相同空间大小的两个东西进行复制

1.2.2 数据结构——泛型输出


2. strcmp 比较

2.1 函数介绍

描述:

C 库函数 int strcmp(const char *str1, const char *str2) 把 str1 所指向的字符串和 str2 所指向的字符串进行比较。

参数:

  • str1 – 要进行比较的第一个字符串。
  • str2 – 要进行比较的第二个字符串。

返回值:

  • 如果返回值小于 0,则表示 str1 小于 str2。
  • 如果返回值大于 0,则表示 str1 大于 str2。
  • 如果返回值等于 0,则表示 str1 等于 str2。

注意:

  • 比较规则:两个字符串自左向右逐个字符相比(按 ASCII 值大小相比较),直到出现不同的字符或遇 \0 为止。
    如:
    1."A"<"B" 
    2."A"<"AB" 
    3."Apple"<"Banana" 
    4."A"<"a" 
    5."compare"<"computer"
    
  • 特别注意:strcmp(const char *s1,const char * s2) 这里面只能比较字符串,即可用于比较两个字符串常量,或比较数组和字符串常量,不能比较数字等其他形式的参数。

2.2 用法示例

2.2.1 用户身份核验

if(strcmp(userpass,temp)==0)

2.2.2 对字符串进行排序

/*
* - 功能:对输入的字符串进行排序
* - 参数:char **str,int n
* - 返回值:成功返回1、失败返回0
* - 作者:SU
*/
Status SortStr(char **str,int n)
{
	char* temp = NULL;
	for (int i = 0; i < n; i++)
	{
		for (int j = i+1; j < 10; j++)
		{
			if (strcmp(str[i],str[j])>0)
			{
				temp = str[i];
				str[i] = str[j];
				str[j] = temp;
			}
		}
	}
	return SUCCESS;
}

(2021/11/6编辑)

3. memset 单字符填充字符串

3.1 函数介绍

概述:

C 库函数 void *memset(void *str, int c, size_t n) 复制字符 c(一个无符号字符)到参数 str 所指向的字符串的前 n 个字符。
用c把str填充完整
包含在<string.h>

参数:

  • str – 指向要填充的内存块。
  • c – 要被设置的值。该值以 int 形式传递,但是函数在填充内存块时是使用该值的无符号字符形式
  • n – 要被设置为该值的字符数。

3.2 用法示例

3.2.1 清零字符串

char str[50];
memset(str,0,sizeof(str));

4. sprintf 格式化变量到字符串

4.1 函数介绍

概述:

int sprintf(char *str, const char *format, …) 发送格式化输出到 str 所指向的字符串。
包含在<stdio.h>中

参数:

  • str – 这是指向一个字符数组的指针,该数组存储了 C 字符串。
  • format – 这是字符串,包含了要被写入到字符串 str 的文本。它可以包含嵌入的 format 标签,format 标签可被随后的附加参数中指定的值替换,并按需求进行格式化。

4.2 用法示例

4.2.1 在RC522门禁中获取卡号

void NFC()
{
	uint8_t RxBuffer[4];
	char Card_ID[8];
	
	PCD_Request(PICC_REQALL, RxBuffer);//返回值为0,代表寻卡成功;并把卡类型存入RxBuffer中
	PCD_Anticoll(RxBuffer);   //防冲撞,完成这部就可以简单地 读取卡号
	
	sprintf(Card_ID,"%x%x%x%x",RxBuffer[0],RxBuffer[1],RxBuffer[2],RxBuffer[3]);
	
	if(strcmp(Card_ID,"xxxxxxx")==0)//xxx为允许进入的卡号
	{
		;//开门
		memset(RxBuffer, 0, sizeof(RxBuffer));//清空字符串,这里要清除RxBuffer才行
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值