字符函数、字符串函数、内存函数

目录

求字符串长度:

size_t  strlen ( const char * str );

 无长度限制的字符串函数

字符串拷贝:

 char * strcpy ( char * destination, const char * source );

字符串追加:

char * strcat ( char * destination, const char * source );

字符串比较:

int strcmp ( const char * str1, const char * str2 );

有长度限制的字符串函数

字符串拷贝:

char * strncpy ( char * destination, const char * source, size_t num );

 字符串追加:

char * strncat ( char * destination, const char * source, size_t num );

 字符串比较:

 int strncmp ( const char * str1, const char * str2, size_t num );

字符串查找函数

在字符串中查找字符:

char * strchr ( const char * str, int character );

在一个字符串中查找另个一个字符串:

char * strstr ( const char * str1, const char * str2 );

 字符串分割:

char * strtok ( char * str, const char * sep );

 获取错误信息:

 char * strerror ( int errnum );

 字符操作函数

字符分类函数:

字符转换函数:

int tolower ( int ch );

int toupper ( int ch );

 内存操作函数

内存拷贝:

​​​​​​​void * memcpy ( void * destination, const void * source, size_t num );

 内存移动:

void * memmove ( void * destination, const void * source, size_t num );

 内存比较:

int memcmp ( const void * ptr1, const void * ptr2, size_t num );

 内存填充:

void * memset ( void * ptr, int value, size_t num )

 

  • 求字符串长度:

size_t  strlen ( const char * str );

  • 字符串以 '\0' 作为结束标志,strlen函数返回的是在字符串中 '\0' 前面出现的字符个数(不包含 '\0' );
  • str 指向的字符串必须要以 '\0' 结束;
  • 注意函数的返回值为size_t,是无符号的;
  • 若str 指向的字符串中有多个 ' \0 ',则strlen返回的是第一个' \0 '前的字符的个数。

 有如下代码:

#include<stdio.h>
int main()
{
	char arr1[] = "asdfghjkl";
	int len1 = strlen(arr1);
	char arr2[] = "asdf\0ghjkl";
	int len2 = strlen(arr2);
	printf("len1=%d\n", len1);
	printf("len2=%d\n", len2);
	return 0;
}

arr2数组比arr1数组中间多了一个' \0 ',因此使用strlen函数时,len1应为9,len2应为4。

代码运行结果:

 用自定义函数实现:

int mystrlen(char* str)
{
	int count = 0;
	while (*str!='\0')
	{
		count++;
		str++;
	}
	return count;
}

 实例:

 

  •  无长度限制的字符串函数

字符串拷贝:

 char * strcpy ( char * destination, const char * source );

  • 将source指向的字符串复制到destination指向的空间中,包括终止空字符(并在该点停止)。
  • source指向的字符串不能为空,且必须以 '\0' 结束;
  • 会将source指向的字符串中的 '\0' 拷贝到destination指向的空间中。
  • destination指向的空间必须足够大,以确保能存放source指向的字符串。
  • destination指向的空间必须可变。
  • destination指向的空间与source指向的空间不应有重叠。
  • 与strlen类似,strcpy遇到第一个‘ \0 ’时就会终止。

有如下代码:

int main()
{
	char str[] = "asdfg\0hgfd";
	char str1[] = "Sample string";
	char str2[40] = { 0 };
	char str3[40] = { 0 };
	char str4[40] = { 0 };
	strcpy(str2, str1);
	strcpy(str3, "copy successful");
	strcpy(str4, str);
	printf("str1: %s\n", str1);
	printf("str2: %s\n", str2);
	printf("str3: %s\n", str3);
	printf("str4: %s\n", str4);
	return 0;
}

运行结果:

 用自定义函数实现:

char* mystrcpy(char* des, const char* sour)
{
	char* cur = des;
	assert(des);
	assert(sour);
	while (*cur++ = *sour++)
	{
		;
	}
	return des;
}

实例:

 

字符串追加:

char * strcat ( char * destination, const char * source );

  • 将source指向的字符串追加到destination后边,若destination后边有‘  \0 ’,会覆盖掉‘ \0 
  • destination指向的空间必须可修改且足够大。
  • source指向的字符串不能为空,且必须以 '\0' 结束。
  • destination指向的空间和source指向的空间不可重叠。
  • 与strlen、strcpy类似,strcat遇到第一个‘ \0 ’时就会终止。

有如下代码:

int main()
{
	char str[80] = { 0 };
	strcpy(str, "these ");
	strcat(str, "strings ");
	strcat(str, "are ");
	strcat(str, "concat\0enated.");
	puts(str);
	return 0;
}

运行结果:

 自定义函数实现:

char* mystrcat(char* des,const char* sour)
{
	assert(des);
	assert(sour);
	char* cur = des;
	while (*cur)//找到尾
	{
		cur++;
	}
	while (*cur++ = *sour++)
	{
		;
	}
	return des;
}

运行实例:

字符串比较:

int strcmp ( const char * str1, const char * str2 );

  • 比较两个字符串str1和str2
  • 从第一个字符开始依次比较,直至字符不同或到达终止字符
  • 比较两个字符时,比较的是ASCII码
  • 返回值表明
    <0两个内存块中不匹配的第一个字节在 ptr1 中的值低于 ptr2 中的值
    0两个内存块的内容相等
    >0两个内存块中不匹配的第一个字节在 ptr1 中的值大于在 ptr2 中的值

有如下代码:

int main()
{
	char str1[] = "abcdefg";
	char str2[] = "abcdegh";
	if (strcmp(str1, str2) > 0)
	{
		printf("str1>str2\n");
	}
	else if(strcmp(str1, str2) == 0)
	{
		printf("str1=str2\n");
	}
	else
	{
		printf("str1<str2\n");
	}
	return 0;
}

运行结果:

 自定义函数实现:

int mystrcmp(const char* str1, const char* str2)
{
	assert(str1 && str2);

	while (*str1 == *str2)
	{
		if (*str1 == '\0')
			return 0;

		str1++;
		str2++;
	}

	return (*str1 - *str2);
}

实例:

  • 有长度限制的字符串函数

字符串拷贝:

char * strncpy ( char * destination, const char * source, size_t num );

  • 从source指向的字符串中拷贝num个字符到destination在指向的空间中
  • destination指向空间要大于num个字节,否则无法在结尾追加终止字符
  • destination指向的空间和source指向的空间不能有重叠
  • 若source指向的字符串长度小于num,则拷贝完source指向的字符串后,继续在后边追加0,直至num个
  • 若source指向的字符串长度大于等于num,则拷贝num个字符后停止,不会自动加‘ \0 ’

有如下代码:

int main()
{
	char str1[]   = "To be or not to be";
	char str2[40] = "asdfghjklopiuytrewqbnchux";
	char str3[40];
	char str4[40];
	char str5[40];
	char str6[18];
	char str7[10];
	//拷贝长度等于str1长度
	strncpy(str2, str1, strlen(str1));
	//拷贝长度小于str1长度
	strncpy(str3, str2, 5);
	//拷贝长度等于str1长度
	strncpy(str4, str1, strlen(str1));
	//拷贝长度大于str1长度
	strncpy(str5, str1, strlen(str1) + 5);
	//目的地空间等于拷贝长度
	strncpy(str6, str1, strlen(str1));
	//目的地空间小于拷贝长度
	strncpy(str7, str1, strlen(str1));
	puts(str1);
	puts(str2);
	puts(str3);
	puts(str4);
	puts(str5);
	puts(str6);
	puts(str7);
	return 0;
}

运行结果:

 自定义函数实现:

char* mystrncpy(char* des, const char* sour, int num)
{
	assert(des);
	assert(sour);
	assert(num >= 0);
	char* cur = des;
	while (num)
	{
		if (*sour == '\0')
		{
			break;
		}
		*cur++ = *sour++;
		num--;
	}
	if (num != 0)
	{
		while (num--)
		{
			*cur++ = '\0';
		}
	}
	return des;
}

实例:

 字符串追加:

char * strncat ( char * destination, const char * source, size_t num );

  • 在destination指向字符串末尾追加source指向字符串的前num个字符,并额外追加一个终止字符。
  • 若num大于source指向字符串长度,则仅复制终止字符之前的内容。

有如下代码:

int main()
{
	char str[] = "asdfg\0hjk";
	char str1[6] = "e";
	char str2[10] = "q";
	char str3[10] = "w";
	strncat(str1, str, 9);
	strncat(str2, str, 9);
	strncat(str3, str, 3);
	puts(str1);
	puts(str2);
	puts(str3);
	return 0;
}

运行结果:

 观察可以发现即使str1指向空间不够额外追加终止字符,strncat也会在str1指向空间后边强制追加一个终止字符。                                                                                                                                   自定函数实现:

char* mystrncat(char* des, const char* sour, int num)
{
	assert(des);
	assert(sour);
	assert(num >= 0);
	char* cur = des;
	while (*cur)
	{
		cur++;
	}
	while (num)
	{
		if (*sour == '\0')
		{
			break;
		}
		*cur++ = *sour++;
		num--;
	}
	*cur = '\0';
	return des;
}

实例;

 字符串比较:

 int strncmp ( const char * str1, const char * str2, size_t num );

  • 比较两个字符串str1和str2前num个字符
  • 从第一个字符开始依次比较,直至字符不同或到达终止字符或到达第num个字符
  • 比较两个字符时,比较的是ASCII码
  • 返回值表明
    <0两个内存块中不匹配的第一个字节在 ptr1 中的值低于 ptr2 中的值
    0两个内存块的内容相等
    >0两个内存块中不匹配的第一个字节在 ptr1 中的值大于在 ptr2 中的值

有如下代码:

int main()
{
	char str[][5] = { "R2D2" , "C3PO" , "R2A6" };
	int n;
	for (n = 0; n < 3; n++)
	{
		//找前两个字符为“R2”的字符串
		if (strncmp(str[n], "R2xx", 2) == 0)
		{
			printf("found %s\n", str[n]);
		}
	}
	return 0;
}

运行结果:

 自定义函数实现:

int mystrncmp(const char* str1, const char* str2, int num)
{
	assert(str1 && str2);
	assert(num > 0);
	while ((*str1 == *str2) && num--)
	{
		if (*str1 == '\0'||num == 0)
		{
			return 0;
		}
		str1++;
		str2++;
	}
	return (*str1 - *str2);
}

实例:

  • 字符串查找函数

在字符串中查找字符:

char * strchr ( const char * str, int character );

  • 在字符串str中找字符character,并返回指向该字符的指针,若找不到返回NULL
  • 终止字符‘ \0 ’也被视为字符串str的一部分,因此也可以查找。
  • 字符character以int类型传递,但在内部会转换为char类型进行查找。

有如下代码:

int main()
{
	char str[] = "This is a sample string";
	char* pch = NULL;
	printf("Looking for the 's' character in \"%s\"\n", str);
	pch = strchr(str, 's');
	while (pch != NULL)
	{
		printf("found at %d\n", pch - str + 1);
		pch = strchr(pch + 1, 's');
	}
	int len = strlen(str);
	printf("len = %d\n", len);
	pch = strchr(str, '\0');
	printf("pch - str = %d\n", pch - str);
	return 0;
}

运行结果:

 自定义函数实现:

char* mystrchr(const char* str, int ch)
{
	assert(str);
	if (ch == '\0')
	{
		while (*str)
		{
			str++;
		}
		return str;
	}
	while (*str)
	{
		if (*str == ch)
		{
			return str;
		}
		str++;
	}
	return NULL;
}

实例:

​​​​​​​

在一个字符串中查找另个一个字符串:

char * strstr ( const char * str1, const char * str2 );​​​​​​​

  • 在str1中找str2第一次出现的位置并返回该位置的指针,否则返回NULL
  • 匹配过程不包括‘ \0 ’

有如下代码:

int main()
{
	char str[] = "This is a simple string";
	char* pch;
	pch = strstr(str, "simple");
	puts(pch);
	if (pch != NULL)
	{
		strncpy(pch, "SAMPLE", 6);
	}
	puts(pch);
	return 0;
}

运行结果:

 自定义函数实现:

char* mystrstr(const char *str1, const char* str2)
{
	char* cp = str1;
	char* s1 = cp;
	char* s2 = str2;
	if (*str2 == '\0')
	{
		return str1;
	}
	while (*cp)
	{
		s1 = cp;
		s2 = str2;
		while (*s1 && *s2 && *s1 == *s2)
		{
			s1++;
			s2++;
		}
		if (*s2 == '\0')
		{
			return cp;
		}
		cp++;
	}

	return NULL;
}

实例:

 字符串分割:

char * strtok ( char * str, const char * sep );

  • sep参数是个字符串,定义了用作分隔符的字符集合
  • 第一个参数指定一个字符串,它包含了0个或者多个由sep字符串中一个或者多个分隔符分割的标记。
  • strtok函数找到str中的下一个标记,并将其用 \0 结尾,返回一个指向这个标记的指针。(注:strtok函数会改变被操作的字符串,所以在使用strtok函数切分的字符串一般都是临时拷贝的内容并且可修改。)
  • strtok函数的第一个参数不为 NULL ,函数将找到str中第一个标记,strtok函数将保存它在字符串中的位置。
  • strtok函数的第一个参数为 NULL ,函数将在同一个字符串中被保存的位置开始,查找下一个标记。
  • 如果字符串中不存在更多的标记,则返回 NULL 指针。

有如下代码:

int main()
{
	char arr[] = "asdfgh@yeah.net@666#777";
	char copy[30];
	strcpy(copy, arr);

	char sep[] = "@#.";
	char* ret = NULL;

	for (ret = strtok(copy, sep); ret != NULL; ret=strtok(NULL, sep))
	{
		printf("%s\n", ret);
	}
	return 0;
}

运行结果:

  •  获取错误信息:

 char * strerror ( int errnum );

  • 返回错误码errnum所对应的错误信息

 有如下代码:打印错误码0~9所对应的错误信息

int main()
{
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		printf("%d: %s\n", i, strerror(i));
	}
	return 0;
}

运行结果:

  •  字符操作函数

 使用字符操作函数徐要包含头文件<ctype.h>

字符分类函数:

函数如果他的参数符合下列条件就返回真
iscntrl任何控制字符
isspace空白字符:空格‘ ’,换页‘\f’,换行'\n',回车‘\r’,制表符'\t'或者垂直制表符'\v'
isdigit十进制数字 0~9
isxdigit十六进制数字,包括所有十进制数字,小写字母a~f,大写字母A~F
islower小写字母a~z
isupper大写字母A~Z
isalpha字母a~z或A~Z
isalnum字母或者数字,a~z,A~Z,0~9
ispunct标点符号,任何不属于数字或者字母的图形字符(可打印)
isgraph任何图形字符
isprint任何可打印字符,包括图形字符和空白字符

字符转换函数:

int tolower ( int ch );

  • 若ch是大写字母,则转换为小写字母

int toupper ( int ch );

  • 若ch是小写字母,则转换为大写字母

有如下代码:

#include <ctype.h>
int main()
{
	int i = 0;
	char str[] = "Test String.";
	puts(str);
	char c;
	while (str[i])
	{
		c = str[i];
		if (isupper(c))
		{
			c = tolower(c);
		}
		putchar(c);
		i++;
	}
	printf("\n");
	i = 0;
	while (str[i])
	{
		c = str[i];
		if (islower(c))
		{
			c = toupper(c);
		}
		putchar(c);
		i++;
	}
	return 0;
}

运行结果:

  •  内存操作函数

内存函数的操作对象不再局限于字符串

内存拷贝:

​​​​​​​void * memcpy ( void * destination, const void * source, size_t num );

  • 函数memcpy从source的位置开始向后复制num个字节的数据到destination的内存位置。
  • 这个函数在遇到 '\0' 的时候并不会停下来。
  • source和destination不能有重叠,如果source和destination有任何的重叠,复制的结果都是未定义的。

有如下代码:

int main()
{
	int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };
	//01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00 06 00 00 00

	int arr2[20] = { 0 };
	memcpy(arr2, arr1, 21);
	int i = 0;
	for (i = 0; i < 20; i++)
	{
		printf("%d ", arr2[i]);
	}
	return 0;
}

 运行结果:

 自定义函数实现:

void* mymemcpy(void* dest, const void* src, size_t num)
{
	void* ret = dest;
	assert(src && dest);

	while (num--)
	{
		*(char*)dest = *(char*)src;
		dest = (char*)dest + 1;
		src = (char*)src + 1;
	}
	return ret;
}

实例:

 内存移动:

void * memmove ( void * destination, const void * source, size_t num );

  •  和memcpy的差别就是memmove函数处理的destination和source是可以重叠的
  • 如果源空间和目标空间出现重叠,就得使用memmove函数处理。

有如下代码:

int main()
{
	char str[] = "memmove can be very useful....?!";
	puts(str);
	memmove(str + 20, str + 15, 11);
	puts(str);
	return 0;
}

运行结果:

 自定义函数实现:

void* mymemmove(void* dest, const void* src, size_t num)
{
	void* ret = dest;
	assert(dest && src);

	if (dest < src)
	{
		//前->后
		while (num--)
		{
			*(char*)dest = *(char*)src;
			dest = (char*)dest + 1;
			src = (char*)src + 1;
		}
	}
	else
	{
		//后->前
		while (num--)//20
		{
			*((char*)dest + num) = *((char*)src + num);
		}
	}
	return ret;
}

实例:

 内存比较:

int memcmp ( const void * ptr1, const void * ptr2, size_t num );

  • 比较从ptr1和ptr2指向位置开始的前num个字节的内容,如果它们都相等,则返回零,如果不匹配,则返回一个不同于零的值,表示哪个值更大。(注意:与 strcmp 不同,该函数在找到空字符后不会停止比较。)
  • 返回值表明
    <0两个内存块中不匹配的第一个字节在 ptr1 中的值低于 ptr2 中的值
    0两个内存块的内容相等
    >0两个内存块中不匹配的第一个字节在 ptr1 中的值大于在 ptr2 中的值

有如下代码:

int main()
{
	int arr1[] = { 1,2,3,4,5 };//01 00 00 00   02 00 00 00   03 00 00 00   04 00 00 00   05 00 00 00
	int arr2[] = { 1,2,257 };  //01 00 00 00   02 00 00 00   01 01 00 00 
	int ret = memcmp(arr1, arr2, 10);
	printf("%d\n", ret);
	return 0;
}

运行结果:

 自定义函数实现:

int mymemcmp(const void* str1, const void* str2, int len)
{
	assert(str1);
	assert(str2);
	while ((*(char*)str1 == *(char*)str2) && len--)
	{
		if (len == 0)
		{
			return 0;
		}
		str1 = (char*)str1 + 1;
		str2 = (char*)str2 + 1;
	}
	if (*(char*)str1 > *(char*)str2)
	{
		return 1;
	}
	if (*(char*)str1 < *(char*)str2)
	{
		return -1;
	}
}

实例:

 内存填充:

void * memset ( void * ptr, int value, size_t num );

  • 从ptr指向位置开始向后num个字节填充为value,且不会因遇到终止字符而停止

有如下代码:

int main()
{
	char arr[] = "hellohehe";
	memset(arr+1,'x',5);
	printf("%s\n", arr);
	return 0;
}

运行结果:

 自定义函数实现:

void* mymemset(void* ptr, int val, size_t num)
{
	assert(ptr);
	void* cur = ptr;
	while (num--)
	{
		*(char*)cur = val;
		cur = (char*)cur + 1;
	}
	return ptr;
}

实例:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/64468.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AR远程专家指导在汽车改装上的应用有哪些?

随着科技的不断发展&#xff0c;AR增强现实技术逐渐走进了我们的生活。加上商贸国际化&#xff0c;远程协同纵深到制造生产的更多环节&#xff0c;研发协同、工艺优化等场景复杂、跨层级、需要频繁沟通确认的流程正通过AR应用实现全面远程化的过渡&#xff0c;在汽车行业&#…

机器视觉赛道持续火热,深眸科技坚持工业AI视觉切入更多应用领域

随着深度学习等算法的突破、算力的不断提升以及海量数据的持续积累&#xff0c;人工智能逐渐从学术界向工业界落地。而机器视觉作为人工智能领域中一个正在快速发展的分支&#xff0c;广泛应用于工业制造的识别、检测、测量、定位等场景&#xff0c;相较于人眼&#xff0c;在精…

C++ 测试框架 GoogleTest 初学者入门篇 丙

断言 什么是断言&#xff1f;断言是用来对表达式执行比较的代码块&#xff0c;调用时类似函数。当表达式一致时&#xff0c;断言返回成功&#xff0c;否则失败。 googletest 的断言是一组宏定义。分为 ASSERT_* 和 EXPECT_* 两种。 比如 ASSERT_EQ(1, 2);EXPECT_EQ(1, 2);上…

MySQL主从复制——概念、原理、搭建过程

文章目录 1.主从复制概念2.主从复制原理3.主从复制结构的搭建3.1 主库配置3.2 从库配置 4.测试主从复制是否搭建成功5.主从复制的小结 DML&#xff08;data manipulation language&#xff09;是数据操纵语言&#xff1a;它们是SELECT、UPDATE、INSERT、DELETE&#xff0c;就象…

vcode开发go

配置环境变量 go env -w GO111MODULEon go env -w GOPROXYhttps://goproxy.cn,direct 创建文件夹 mkdir hello cd hello go mod help go mod help 初始化一个项目 go mod init hello 获取第三方包 go get github.com/shopspring/decimal 将依赖包下载到本地 go mod …

卷积相关点

从传统的神经网络到卷积神经网络 一.传统的神经网络&#xff08;全连接网络&#xff09; 参数太多&#xff0c;冗余度高&#xff0c;容易过拟合&#xff0c;难以训练 二.卷积神经网络 1.空间平移的不变性&#xff1a;当输入的图像在空间上发生平移时&#xff0c;CNN的相应不…

信息与通信工程面试准备——专业知识提问

1.无线通信&#xff1a;依靠电磁波在空间传播以传输信息。 2.通信的目的&#xff1a;传输信息。 3.通信系统&#xff1a;将信息从信源发送到一个或多个目的地。 4.本书中通信一般指电信&#xff1a;利用电信号传输信息&#xff08;光通信属于电信&#xff0c;因为光也是一种…

[NOIP2007 普及组] 纪念品分组

[NOIP2007 普及组] 纪念品分组 题目描述 元旦快到了&#xff0c;校学生会让乐乐负责新年晚会的纪念品发放工作。为使得参加晚会的同学所获得 的纪念品价值相对均衡&#xff0c;他要把购来的纪念品根据价格进行分组&#xff0c;但每组最多只能包括两件纪念品&#xff0c; 并且…

FreeRTOS任务级临界代码保护

前言 临界段代码也叫临界区&#xff0c;是指那些必须完整运行&#xff0c;不能被打断的代码&#xff0c;比如有的外设的初始化需要按照严格的时序&#xff0c;初始化过程不能被打断。FreeRTOS在进入临界段代码的时候需要关闭中断&#xff0c;当处理完临界段代码以后再打开中断…

如何搭建自动化测试框架?资深测试整理的PO模式,一套打通自动化...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 Po模型介绍 1、简…

wpf 3d 坐标系和基本三角形复习

wpf 3d 坐标系的描述见此&#xff0c; WPF 3d坐标系和基本三角形_wpf 坐标系_bcbobo21cn的博客-CSDN博客 X轴正向向右&#xff0c;Y轴正向向上&#xff1b;Z轴&#xff0c;正向是从屏幕里边出来&#xff0c;负向是往屏幕里边去&#xff1b;坐标原点是在呈现区域的中心&#x…

史上最细,自动化测试-logging日志采集详细实战(一)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 日志概述 1、日志…

C#实现旋转图片验证码

开发环境&#xff1a;C#&#xff0c;VS2019&#xff0c;.NET Core 3.1&#xff0c;ASP.NET Core 1、建立一个验证码控制器 新建两个方法Create和Check&#xff0c;Create用于创建验证码&#xff08;返回1张图片和令牌&#xff09;&#xff0c;Check用于验证&#xff08;验证图…

决策树和随机森林对比

1.用accuracy来对比 # -*-coding:utf-8-*-""" accuracy来对比决策树和随机森林 """ from sklearn.tree import DecisionTreeClassifier from sklearn.ensemble import RandomForestClassifier from sklearn.datasets import load_wine#(178, 13…

【LeetCode】240.搜索二维矩阵Ⅱ

题目 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。每列的元素从上到下升序排列。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,…

Iotdb 0.13配置集群和数据同步共享

描述 官网集群配置示例&#xff1a;官方文档 准备2台服务器&#xff0c;并且相互可以ping通和相关端口开放&#xff1a; 192.168.1.1192.168.1.2 相关介绍请查看官网及相关文档。 配置 1、iotdb 0.13版本下载&#xff08;如果已安装请跳过&#xff09;&#xff0c;进入op…

24届近5年杭州电子科技大学自动化考研院校分析

今天给大家带来的是杭州电子科技大学控制考研分析 满满干货&#xff5e;还不快快点赞收藏 一、杭州电子科技大学 学校简介 杭州电子科技大学&#xff08;Hangzhou Dianzi University&#xff09;&#xff0c;简称“杭电”&#xff0c;位于杭州市&#xff0c;是浙江省人民政…

PE半透明屏,在建筑行业中,有哪些应用展示?

PE半透明屏是一种新型的屏幕材料&#xff0c;具有半透明的特点。 它由聚乙烯&#xff08;PE&#xff09;材料制成&#xff0c;具有良好的透明度和柔韧性。 PE半透明屏广泛应用于建筑、广告、展览等领域&#xff0c;具有很高的市场潜力。 PE半透明屏的特点之一是其半透明性。…

弘扬“两弹一星”精神,勇攀科学技术高峰——道本科技商业大学党日活动圆满落幕

2023年8月2日&#xff0c;道本科技与商业大学携手举办了一场主题为“弘扬‘两弹一星’精神&#xff0c;勇攀科学技术高峰”的党日活动。本次活动旨在了解党领导下的中国核工业发展历程&#xff0c;传承和弘扬“两弹一星”精神&#xff0c;同时展示道本科技创新产品&#xff0c;…

【数据结构】单链表OJ题

&#x1f525;博客主页&#xff1a;小王又困了 &#x1f4da;系列专栏&#xff1a;数据结构 &#x1f31f;人之为学&#xff0c;不日近则日退 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、移除链表元素 &#x1f4a1;方法一&#xff1a; &#x1f4a1;方法二…