字符函数与字符串函数

news2024/11/17 13:48:38

目录

 一.字符分类函数

二.字符转化函数 

三.strlen函数 

函数的介绍

strlen函数的模拟实现

1.计算器法

2.递归 

三.指针-指针的方式 

 四.strcpy函数

 函数介绍

strcmp的模拟实现

五.strcat函数 

函数介绍

strcat的模拟实现

六.strcmp函数

函数介绍 

返回值

strcmp函数的模仿实现

七.strncpy,strncat,strncmp函数 

(1)strncpy 

(2)strncat

(3)strncmp函数

注意事项

八.strstr函数

函数的介绍

返回值

strstr函数的模拟实现

九.strtok函数

 十.strerror函数

错误码

perror函数


 

 一.字符分类函数

C语言中有一系列函数是专门做字符分类的,也就是一个字符是属于什么类型的字符的。

这些函数的使用都需要包含一个头文件是ctype.h

函数作用
isalnum检查一个字符是否是字母或数字
isalpha检查一个字符是否是字母
islower检查一个字符是否是小写字母
isupper检查一个字符是否是大写字母
isdigit检查字符是否为数字
isxdigit检查一个字符是否是十六进制的字符
iscntrl检查一个字符是否是控制字符
isgraph

检查一个字符是否是图形字符

isspace检查一个字符是否是空白字符
isblank检查一个字符是否是空格字符
isprint检查一个字符是否是可打印字符
ispunct检查一个字符是否是标点字符

参考网址: 空终止字节字符串 - cppreference.comicon-default.png?t=N7T8https://zh.cppreference.com/w/c/string/byte

#include<ctype.h>
#include<stdio.h>
int main()
{
	int ret = isalnum('a');
	printf("%d",ret);
	return 0;
}

 这些函数的的参数都是是int类型的,即使我们传过去的是字符,但是其实是根据它的ASCII值进行计算的。返回类型是int,如果是就会返回一个非零的数字,比如上述代码返回值就是2.(这可能有所差异),但一定是非零值,如果不是上述的所有函数都会返回0.

练习:写一个代码将字符串中的小写转化为大写,其他字符不变。

int main()
{
	char str[] = { "Hello World!" };
	int i = 0;
	char c;
	while (str[i]) {
		c = str[i];
		if (islower(c)) {
			c -= 32;
		}
		i++;
		putchar(c);
	}
}

 这里-32的原因是因为ASCII值中a的值是97,A的值是65,也就是所小写字母减32就是大写字母。通过这一点我们就可以知道如何进行大小写的转化。

二.字符转化函数 

ctype:<cctype> (ctype.h) - C++ Reference

 字符转化函数只有两种;

函数功能
toupper将小写字符转化为大写的
tolower将大写字符转化为小写的

这两个函数的参数也是int 返回值也是int,返回值返回的就应该是该字符对应ASCII值。

如果这个字符无法转化,就只会返回原字符。

所以上述的题目就可以改写为: 

int main()
{
	char str[] = { "Hello World!" };
	int i = 0;
	char c;
	while (str[i]) {
		c = str[i];
		if (islower(c)) {
			c = toupper(c);
		}
		i++;
		putchar(c);
	}
}

注意传递的参数只能是一个字符,而不能是字符串 

三.strlen函数 

函数的介绍

 函数原型:

size_t strlen(const char* str);

函数功能是返回字符串的长度。字符串的长度是有'\0'字符决定,它之前的字符个数就是字符串的长度。C字符串的长度等于字符串开头和'\0'字符之间的字符数.

注:字符串长度是不包括'\0'的

 注意字符串的长度是与包含字符串的数组的大小不一样的。

int main()
{
	char str[] = "abcdef";
	return 0;
}

通过调试,我们可以发现,这个数组的类型是char[7]说明这个数组大小是7,但是字符串的长度是6。

所有我们如果给【】中加上值,这个值的大小至少要是7,不能比7小不如就存不下这个字符串。

那么多余的值就会被初始化为'\0'.

字符串以'\0'作为结束的标志,strlen返回的是'\0'之前的字符个数,不包含'\0'.

注意函数的返回值是size_t类型的是无符号的。

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

strlen函数的模拟实现

1.计算器法

#include<assert.h>
#include<stdio.h>
size_t my_strlen(const char* str)
{
	int count = 0;
	assert(str);
	while (*str) {
		count++;
		str++;
	}
	return (size_t)count;
}

2.递归 

size_t my_strlen(const char* str)
{
	assert(str);
	if (*str == '\0')
		return 0;
	else
		return 1 + my_strlen(str++);
}

递归相比其他的方法是没有创建临时变量。 

三.指针-指针的方式 

回顾:指针减指针得到的是指针之间的元素个数+1,比如第五个字符的地址-第一个字符的地址就是4(中间有三个元素+1);

size_t my_strlen(const char* str) {
	assert(str);
	char* start = str;
	while (*str != '\0') {
		str++;
	}
	return str - start;
}

注意这里必须是高地址减低地址,不然就是负数了。 

 四.strcpy函数

 函数介绍

strcpy是用于字符串拷贝的,第一个参数destination是目的地的地址,而第二个参数是源头的地址。

#include<stdio.h>
#include<string.h>
int main()
{
	char dest[10] = "abc";
	char* source = "abcdef";
	strcpy(dest,source);
	printf("%s",dest);
	return 0;
}

这样我们就把source所指向的字符串成功复制到了dest字符数组中。

注意事项:

  1. 字符串在拷贝的过程中是包含字符'\0'的,而且会在这个字符停止拷贝。也就是所源字符串必须以'\0'结尾。
  2. 为了避免溢出,目标空间必须足够大,要确保能完整存放源字符串。
  3. 目标空间必须能够修改。
  4. 目标空间在内存上不能与源字符串相互重叠。

返回值是目标空间的地址。 

strcmp的模拟实现

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

char* my_strcpy(char* destination,const char* source)
{
	char* ret = destination;
	while (*source)
	{
		*destination++ = *source++;
	}
	*destination = *source;//最后将'\0'复制
	return ret;
}
int main()
{
	char dest[10] = "abcxxxxxxx";
	char* source = "abcdef";
	my_strcpy(dest,source);
	printf("%s",dest);
	return 0;
}

简化一下:

char* my_strcpy(char* destination, const char* source)
{
	char* ret = destination;
	while (*destination++ = *source++)
	{
		;
	}
	return ret;
}

五.strcat函数 

函数介绍

strcat这个函数是用于字符串附加的,将source所指向的字符串附加到destination的末尾。

int main()
{
	char dest[20] = "hello ";
	char* source = "world!";
	strcat(dest,source);
	printf("%s",dest);
	return 0;
}

也就是将source的字符串链接在dest的后面。我们知道字符串的末尾是有一个隐藏的'\0'的,但是这里还是打印出了world!,说明在使用strcat进行附加的时候,末尾的'\0'是已经被覆盖了的。

注意事项:

  1. destination所指向的字符串最后的'\0'字符被source所指向的字符串的第一个字符覆盖了。
  2. 这个新的字符串末尾是含有'\0'的。
  3. 目标空间必须足够大,要能容纳新的字符串。
  4. destination和source所指向的空间在内存上不能重叠,否则运行结果是未知的。

返回值的是destination的起始地址。

strcat的模拟实现

 首先我们需要先找到目标字符末尾的'\0'字符,然后进行拷贝。

#include<stdio.h>
#include<string.h>
char* my_strcat(char* destination,const char* source)
{
	char* ret = destination;
	while (*destination)
		destination++;
	while (*destination++ = *source++);
	return ret;
}
int main()
{
	char dest[20] = "hello ";
	char* source = "world!";
	my_strcat(dest,source);
	printf("%s",dest);
	return 0;
}

六.strcmp函数

参考网址:strcmp - C++ Referenceicon-default.png?t=N7T8https://legacy.cplusplus.com/reference/cstring/strcmp/?kw=strcmp

函数介绍 

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

This function starts comparing the first character of each string. If they are equal to each other, it continues with the following pairs until the characters differ or until a terminating null-character is reached.This function performs a binary comparison of the characters.

这个函数是用于比较两个字符串的。这个函数首先会比较两个字符串的首字符,如果相同,这个函数就会继续比较下一对字符,直到遇到不同的字符或者'\0'.这个函数的执行的是二进制的比较。

返回值

情况1: 

"abc"//str1
"abf"//str2

这两个字符串的前两个字符相同,而第三个字符不同,c的ASCII值小于f的ASCII值。所以strcmp会返回一个小于0的整形。

 情况2:

"abc"//str1
"abc"//str2

这两个字符串一模一样,这样就会strcmp就会返回一个0。

情况3:

"abc"//str1
"abb"//str2

这两个字符串的前两个字符相同,而第三个字符不同,c的ASCII值大于b的ASCII值。所以strcmp会返回一个大于0的整形。 

情况4:

"abc"//str1
"aaz"//str2

 这两个字符串的第一个字符相同,而第二个字符str1大于str2,这时候返回一个大于0的整形。第三个字符就不会进行比较了。

strcmp函数的模仿实现

#define _CRT_SECURE_NO_WARNINGS 
#include<stdio.h>
#include<string.h>
#include<assert.h>
int my_strcmp(const char* str1, const char* str2)
{
	assert(str1 && str2);
	int ret = 0;
	while (*str1 == *str2)
	{
		if (*str1 == '\0')
		{
			return 0;
		}
		str1++;
		str2++;
	}
	return *str1 - *str2;
}
int main()
{
	char* str1 = "abc";
	char* str2 = "aaz";
	printf("%d",my_strcmp(str1,str2));
	return 0;
}

七.strncpy,strncat,strncmp函数 

这三个函数与上面所讲的三个函数非常的相似,从函数民上我们发现只多了一个n字母。

那么实际上他们有什么区别呢?

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);

从他们的参数上来看,我们发现只多了一个size_t类型的参数num,也就是函数名中多的n。

那么这个num到底有什么用呢?

(1)strncpy 

对于strncpy来说,这个num就是用于指定字数的字符串拷贝。

int main()
{
	char dest[20] = "xxxxxxxxxxhello ";
	char* source = "world!";
	strncpy(dest,source,5);
	printf("%s",dest);
	return 0;
}

打印结果:

仔细观察发现source中的感叹号并没有复制到dest字符中。也就是只复制了source的前五个字符。所以这个num就是给我们来控制想复制的字符个数的。

如果num的值大于source所指向的字符串的长度 。会在拷贝完字符串后,在'\0'的后面一直追加0,直到满足num个字符。

模拟实现

#include<stdio.h>
char* my_strncpy(char* destination, const char* source, size_t num)
{
	char* ret = destination;
	for (int i = num; i > 0; i--)
	{
		if (*source) {
			*destination = *source;
		}
		else {
			*destination = '\0';
		}
		destination++;
		source++;
	}
	return ret;
}
int main()
{
	char str1[20] = "xxxxx world!!!";
	char* str2 = "hello";
	printf("%s\n", str1);
	my_strncpy(str1,str2,7);
	printf("%s",str1);
	return 0;
}

(2)strncat

这个函数同理,num也是用于控制附加的个数的。

int main()
{
	char dest[20] = "hello ";
	char* source = "world!";
	strncat(dest,source,5);
	printf("%s",dest);
	return 0;
}

 虽然我们只附加了五个字符,这个是并没有包含'\0'的,所以这个函数会自动在新字符串的末尾补上斜杠零。

strcat的模拟实现

char* my_strncat(char* destination, const char* source, size_t num)
{
	char* ret = destination;
	while (*destination)
	{
		destination++;
	}
	
	for (int i = 0; i < num; i++)
	{
		if (*source) {
			*destination = *source;
		}
		else{
			*destination = '\0';
		}
		destination++;
		source++;
	}
	return ret;
}
int main()
{
	char str1[20] = "hello ";
	char* str2 = "world!!!";
	printf("%s\n", str1);
	my_strncat(str1, str2, 7);
	printf("%s", str1);
	return 0;
}

(3)strncmp函数

这个函数也是,num控制比较的个数。只比较前num个字符,其他均与strcmp一样

注意事项

这六个函数的目标字符串和源字符串都不能在内存上有任何重叠,不然运行结果是未知的,可能复合要求,也可能不符合,这与编译器有关。

八.strstr函数

函数的介绍

参考网址:strstr - C++ Reference

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

 这个函数是用于在一个字符串中查找是否具有另一个字符串。

返回值

这个函数的返回值是str1中具有str2字符串的首字符的地址。

比如:"abcdef"和"cdef".返回值就是“abcdef”中字符C的地址。

如果没有找到,就会返回NULL.

strstr函数的模拟实现

#include<stdio.h>
#include<string.h>
char* my_strstr(const char *str1,const char*str2)
{
	if (!*str2)
		return (char*)str1;
	char* s1 = NULL;
	char* s2 = NULL;
	char* cur = (char*)str1;
	while (*cur)
	{
		s1 = cur;
		s2 = (char*)str2;
		while (*s1 == *s2 && *s1 && *s2)
		{
			s1++;
			s2++;
		}
		if (!*s2)
			return cur;
		cur++;
	}
	return NULL;
}
int main()
{
	char* str1 = "this is a string";
	char* str2 = "str";
	char * ret = my_strstr(str1,str2);
	printf("%s\n",ret);
	return 0;
}

九.strtok函数

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

这个函数是用于字符串的分隔的。

str指针所指向的是一个需要分隔的字符串。

delimiters所指向的是分隔符的合集。

#include<stdio.h>
#include<string.h>
int main()
{
	char str[20] = "abc.hello_world/no";
	char* del = "._/";
    //第一次分隔
	char* first =  strtok(str,del);
	printf("%s\n",first);
    //第二次分隔
	char*second = strtok(NULL,del);
	printf("%s\n",second);
    //第三分隔
	char* third = strtok(NULL,del);
	printf("%s\n",third);
	return 0;
}

打印结果 

最终我们发现str这个字符数组被分割了,而这个del就是分隔符的合集。这个函数会根据分隔符合集中的每一个字符分割这个字符串,并在新的字符串结尾加上'\0',以免读取时造成溢出的问题。 

每一次调用这个函数只会分隔一次,并且返回初始地址,下一次调用的时候(如果还能进行分隔)只需要传NULL和分隔符。如果读取到了str中的‘\0’就会停止分隔了。并且后续如果继续调用,只会返回NULL.

我们也可以使用for循环的方式对分隔后的字符串进行打印。

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

int main()
{
	char arr[] = "192.168.6.111";
	char* sep = ".";
	char* str = NULL;
	for (str = strtok(arr, sep); str != NULL; str = strtok(NULL, sep))
	{
		printf("%s\n", str);
	}
	return 0;
}

 十.strerror函数

char* strerror(int errnum);

strerror函数可把参数部分错误码所对应的错误信息所对应的字符串的地址返回。

错误码

在不同的系统和C语言标准库中都规定了一些错误码,一般是放在<errno.h> 头文件中的,C语言程序的启动时候,就会使用一个全面的变量errno来记录程序的当前的错误码,只不过程序启动的时候errno是0,表示没有错误,当我们在使用标准库中的函数的时候发生了某种错误,就会将对应的错误码放在errno中,而一个错误码的数字是整数,这是比较难以理解的,所以每一个错误码都是由对应的错误信息的,strerror这个函数就是用于将错误码对应的错误信息对应的字符串地址返回。

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

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

 通过上面的代码我们就可以依次打印出错误信息了。

在Windows11和VS2022的环境下输出结果是:

举例:

#include <stdio.h>
#include <string.h>
#include <errno.h>
int main()
{
	FILE* pFile;
	pFile = fopen("unexist.ent", "r");
	if (pFile == NULL)
		printf("Error opening file unexist.ent: %s\n", strerror(errno));
	return 0;
}

 这个fopen就是用于打开文件的,后续我们会继续了解。

但是我们运行这串代码会发现给出的错误信息是:

这个错误信息的意思是:没有这样的文件或者文件夹,也就是我们打开文件失败了。

perror函数

#include <stdio.h>
#include <string.h>
#include <errno.h>
int main()
{
	FILE* pFile;
	pFile = fopen("unexist.ent", "r");
	if (pFile == NULL)
	//printf("Error opening file unexist.ent: %s\n", strerror(errno));
	perror("Error opening file unexist.ent");
	return 0;
}

 我们也可以使用perror这个函数,这个函数会先打印这个参数部分的字符串,然后就是一个冒号和空格,最后是错误信息。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

论文阅读-MIPD:一种用于分布式深度神经网络训练的自适应梯度稀疏化框架

摘要—基于参数服务器架构的异步训练广泛应用于大规模数据集和深度神经网络模型的扩展训练。在大规模分布式深度学习系统中&#xff0c;通信一直被认为是主要瓶颈。最近的研究尝试通过梯度稀疏化和量化方法来减少通信流量。我们发现前期研究存在三个限制。首先&#xff0c;他们…

pycharm中anaconda虚拟环境下进行matlab函数调用设置

1&#xff0c;具体的matlab版本对应的engine参考 matlab安装路径下的“extern\engines\python”文件夹内&#xff0c;setup.py文件打开可以查看 例如我的安装路径是“C:\Program Files\Polyspace\matlabR2021a\extern\engines\python”&#xff0c;matlab版本是2021a&#xf…

c++的学习之路:2、入门(1)

一、 C关键字 c的关键字要比c语言要多31个足足有63个&#xff0c;这里我只是了解了下每个有啥作用&#xff0c;具体使用方法以及更多的知识将在后续学习中&#xff0c;慢慢扩展使用&#xff0c;下方表格就是c的63个关键字 asmdoifreturntryautodoubleinlinetypedefdynamic_ca…

新能源汽车BMS应用设计

新能源汽车BMS应用设计 电池管理系统&#xff08;BMS&#xff09; 概述 电池管理系统&#xff08;BMS&#xff09;为一套保护动力电池使用安全的控制系统&#xff0c;时刻监控电池的使用状态&#xff0c;通过必要措施缓解电池组的不一致性&#xff0c;为新能源车辆的使用安全…

Android Studio 编译报错 ( Could not find com.android.tools.build:gradle:4.2.1.)

检查下根目录下的 build.gradle 配置 , 是否只配置了 jcenter 仓库 &#xff0c;加上 google()mavenCentral() 重新编译试一下

RuoYi 自定义字典列表页面编码翻译

“字典数据”单独维护&#xff0c;而不是使用系统自带的字典表&#xff0c;应该如何使用这样的字典信息呢&#xff1f; 系统字典的使用&#xff0c;请参考&#xff1a; 《RuoYi列表页面字典翻译的实现》 https://blog.csdn.net/lxyoucan/article/details/136877238 需求说明…

案例精选 | 新疆科技学院下一代智慧安全运营中心建设项目

新疆科技学院&#xff0c;是新疆维吾尔自治区人民政府举办的全日制普通本科高校。学校始建于2002年&#xff0c;前身为新疆财经大学商务学院&#xff0c;2019年12月经教育部批准转设为新疆科技学院。学校分为东、西两个校区&#xff0c;总占地面积3070亩&#xff0c;开设24个本…

在Windows中安装wsl2和ubuntu22.04

目录 一、概述二、安装wsl22.1 虚拟化设置2.2 虚拟化设置2.3 切换和更新wsl2 三、安装ubuntu3.1 下载Ubuntu22.043.2 配置Ubuntu22.04 一、概述 wsl2是一种面向Windows操作系统的虚拟化技术&#xff0c;可以让我们在Windows操作系统中“丝滑”的运行Linux系统。wsl2由微软团队…

VScode手动安装vsix格式插件,提示安装插件与code版本不兼容问题

问题描述: vscode手动按装插件提示"插件不兼容code版本 原因方案:修改安装包内的package.json文件中的版本号与vscode版本号对应即可 解决步骤 以(adpyke.codesnap-1.3.4.vsix)安装包为例 手动安装vscode弹出 无法安装扩展“adpyke.codesnap-1.3.4”&#xff0c;它与 …

BRICK POP展示了有趣的链上游戏玩法与奖励

新游戏BRICK POP将Sui区块链技术与低Gas费用&#xff0c;以及我们在Web3游戏开发方面的专业知识无缝结合。通过充分利用Sui和我们自己的INNO平台的优势&#xff0c;BRICK POP为玩家提供了一个融合了前沿技术和引人入胜游戏的沉浸式游戏体验。BRICK POP游戏设计为实时交易和高用…

三级数据库技术知识点(详解!!!)

1、从功能角度数据库应用系统可以划分为表示层、业务逻辑层、数据访问层、数据持久层四个层次&#xff0c;其中负责向表示层直接传送数据的是业务逻辑层。 【解析】表示层负责所有与用户交互的功能;业务逻辑层负责根据业务逻辑需要将表示层获取的数据进行组织后&#xff0c;传…

Spark-Scala语言实战(5)

在之前的文章中&#xff0c;我们学习了如何在scala中定义与使用集合和元组。想了解的朋友可以查看这篇文章。同时&#xff0c;希望我的文章能帮助到你&#xff0c;如果觉得我的文章写的不错&#xff0c;请留下你宝贵的点赞&#xff0c;谢谢。 Spark-Scala语言实战&#xff08;…

后端程序员入门react笔记(九)- react 插件使用

setState setState引起的react的状态是异步的。操作完毕setState之后如果直接取值&#xff0c;可能取不到最新的值&#xff0c;我们举个例子console.log(this.state.num)打印的值&#xff0c;总是上一次的值而不是最新的。 import React, {Component} from react; class Ap…

Day41:WEB攻防-ASP应用HTTP.SYS短文件文件解析Access注入数据库泄漏

目录 ASP-默认安装-MDB数据库泄漏下载 ASP-中间件-CVE&短文件&解析&写权限 HTTP.SYS&#xff08;CVE-2015-1635&#xff09;主要用作蓝屏破坏&#xff0c;跟权限不挂钩 IIS短文件(iis全版本都可能有这个问题) IIS文件解析 IIS写权限 ASP-SQL注入-SQLMAP使用…

Java安全 反序列化(5) CC6链原理分析

Java安全 反序列化(5) CC6链原理分析 CC6学习的目的在于其可以无视jdk版本&#xff0c;这条链子更像CC1-LazyMap和URLDNS链子的缝合版 文章目录 Java安全 反序列化(5) CC6链原理分析前言一.CC6的原理和实现以及易错点我们如何实现调用LazyMap.get()方法一个易错点 二.完整CC6P…

Kafka 3.x(上)

具体课程请看课程简介_哔哩哔哩_bilibili 概念 分布式流处理平台&#xff0c;它以高吞吐量和可扩展性而闻名。相同类型的消息存在于Topic主题中&#xff0c;主题类似于数据库中的表&#xff0c;不过主题存储的数据大多是半结构化的。主题可以包含多个分区&#xff08;分布式的…

Flink:维表 Join 难点和技术方案汇总

博主历时三年精心创作的《大数据平台架构与原型实现&#xff1a;数据中台建设实战》一书现已由知名IT图书品牌电子工业出版社博文视点出版发行&#xff0c;点击《重磅推荐&#xff1a;建大数据平台太难了&#xff01;给我发个工程原型吧&#xff01;》了解图书详情&#xff0c;…

Vue模块化开发步骤—遇到的问题—解决办法

目录 1.npm install webpack -g 2.npm install -g vue/cli-init 3.初始化vue项目 4.启动vue项目 Vscode初建Vue时几个需要注意的问题-CSDN博客 1.npm install webpack -g 全局安装webpack 直接命令提示符运行改指令会报错&#xff0c;operation not permitted 注意&#…

软件推荐 篇三十七:开源免费无广告的在线音乐免费播放 | MusicFree纯净无广告体验-小众冷门推荐

引言 自从QQ音乐没了杰伦、某云开始收费&#xff0c;除了各种广告弹窗导致电脑卡的要死&#xff0c;打工人就靠这点音乐背景熬夜了&#xff0c;木有办法&#xff0c;得有个开源免费的听歌软件吧&#xff0c;一搜github&#xff0c;软件一大堆&#xff0c;作为一个打工仔&#…

python--for循环

for循环&#xff1a; python中的for循环是用来迭代容器中的每一个元素的&#xff0c;而不是c,java中理解那个循环&#xff1b; for 零时变量 in 容器&#xff1a; print&#xff08;零时变量&#xff09; #每一个迭代出的元素 range 全局函数&#xff1a; …