实验5字符串的操作
- 格式:doc
- 大小:37.00 KB
- 文档页数:3
5.字符串--索引--详解字符串-索引-详解⼀、字符串索引1.索引格式:变量名[头标:下标:步长] 步长不写默认为1索引从左往右是以0开始,从右往左则以-1开始例:从左往右输出变量中得索引值name = 'yang'# 索引 0123print(name[0])结果:y从右往左输出变量中得索引值name = 'yang'# 索引 -4-3-2-1print(name[-1])结果:g2.切⽚例:输出变量中头标⾄下标这个区间的索引值,但不包含终⽌索引的值name = 'yang'# 索引 0123print(name[0:3])结果:yan3.步长步长为每次⾛的步,(有点像跨索引取值)例:name = 'helloword'#索引 012345678#从头标开始每次⾛两步的话,也就是取02468这些索引的值print(name [0:9:2])结果:hlood⼆、字符串详解1.⼤⼩写转换命令格式:换⼤写:变量名.upper()换⼩写:变量名.lower()换⼤写例:a=yanga1=a.upper()print(a1)结果:YANG换⼩写例:a=YANGa1=a.lower()print(a)结果:yang举例:让登录的验证码不区分⼤⼩写y_z_m = 'o98k' #设置验证码y_z_m_input = input("请输⼊验证码(O98k)") #⽤户输⼊验证码new_y_z_m_input = y_z_m_input.lower() #将⽤户输⼊的字符串换成⼩写if y_z_m == new_y_z_m_input:user = input('请输⼊账号:')pwd = input('请输⼊密码:')if user == 'yang' and pwd == '8520':print('登陆成功!')else:print('登录失败')else:print('验证码错误!')2.判断以什么开头命令格式:变量名.startswith('要判断的字符串')变量名.startswith('要判断的字符串',上标,下标)例:name = 'yang'new_name = name.startswith('y') #判断是否为y开头,写⼊逻辑值if new_name: #此处new_name的值为Trueprint('是以y开头')# 判断这是不是字符串是不是以a开头的例:name = 'yang' #可⽤索引指定区间new_name = name.startswith('n',2,5) #2和5分别为起始索引和终⽌索引if new_name:print('是以n开头')# 我们可以指定从哪个位置开始哪个位置结束3.判断以什么结尾命令格式:变量名.endswith('要判断的字符串')变量名.endswith('要判断的字符串',上标,下标)例:name = 'yang'new_name = name.endswith('g')if new_name:print('是以g结尾')# 判断这是不是字符串是不是以x结尾的name = 'yang'new_name = name.endswith('g',2,5)if new_name:print('是以g结尾')# 判断这是不是字符串是不是以x结尾的4.统计出现的次数命令格式:变量名.count('要判断的字符串')例:name = 'yanglang'new_name = name.count('a')print(new_name)# 统计name这个字符串中a出现的次数5.字符串替换命令格式:变量名.replace('被换','要换',换的个数)例:name = 'yanglang'new_name = name.replace('a','b',1) #把name中的a换成b,其中1是替换的次数(替换的个数)print(new_name)结果:ybnglang# 替换字符串中的内容以外我们可以指定要替换的次数例:name = 'yanglang'new_name = name.count('a') #统计a出现的次数(出现的个数)nw_name = name.replace('a','b',new_name) #把所有的a替换成b,print(nw_name)6.去除的头尾两端的空格,换⾏符,制表符命令格式:变量名.strip()例:name = ' yanglang ' # 注意!此处字符串两头是加了空格的new_name = name.strip() # 默认去除的头尾两端的空格,换⾏符,制表符也可以⾃⼰指定print(new_name)# 去除头尾俩遍的空格和换⾏符7.分割字符串命令格式:变量名.split(‘分割点’)变量名.split(‘分割点’,maxsplit=分割次数)例:name = 'yanglang' # 通过n将字符串name进⾏切割,将n作为切割点new_name = name.split("n") # 默认以空格,换⾏符,制表符分隔print(new_name)结果:['ya','gla','g'] # 切割后的内容是⼀个列表,把字符串切割成列表# print(type(变量名))可以输出变量类型例:name = 'yanglang'new_name = name.split("n",maxsplit=1) # 此处的1是切割次数(或者说是切割⼏个x)print(new_name)结果:['ya','glang']8.字符串格式化例:name = 'yanglang{}{}' #这⾥的{}是占位符new_name = name.format('说的对','是的') #可以按照顺序去填充,也可以按照索引去填充,也可以按照关键字填充print(new_name)9.is系列判断是否为⼗进制的数字命令格式:变量名.isdecimal()例:name = 'yanglang'new_name = name.isdecimal() #此处输⼊值为Falseprint(new_name)# 判断是不是⼗进制的数字,返回结果是布尔值判断是否为数字、字母和中⽂命令格式:变量名.isalnum()例:name = 'yanglang'new_name = name.isalnum()print(new_name)# 判断是不是数字和字母以及中⽂,返回结果是布尔值判断是否为纯字母和中⽂命令格式:变量名.isalpha()例:name = 'yanglang'new_name = name.isalpha()print(new_name)# 判断是不是纯字母和汉字,返回的是布尔值10.获取字符串长度命令格式:len(变量名)例:name='yanglang' #字符串name1=['a','b',[1,2,3]] #列表print(len(name)) #结果为 8print(len(name1)) #结果为 311.使⽤while循环打印单个元素例:name = "Meet"count = 0while count < len(name):print(name[count]) #将变量值作为索引,输出此索引的元素count = count + 112.for 循环例:name = "Meet"for i in name:print(i)for i in "Meet":print(i)for循环, for是关键字 i是⼀个变量后边的name是要被循环的内容,他会把这个name指向的字符串⾥的每个元素打印出来for循环是可以循环的数据结构:字符串(str)列表(list)元祖(tuple)字典(dict)集合(set)唯独不能进⾏循环的就是整型(int)和布尔值(bool) #因为这两种数据结构都是单个值【补充】1.字符串⾸字母⼤写命令格式:字符串.capitalize()例:a='asd'a=a.capitalize()print(a) #输出结果为 Asd。
本科实验报告实验名称:子程序设计实验实验五子程序设计实验(设计性实验)一、实验要求和目的1.熟悉汇编语言程序设计结构;2.熟悉汇编语言子程序设计方法;3.熟悉利用汇编语言子程序参数传递方法;4.熟悉汇编语言字符串处理基本指令的使用方法;5.掌握利用汇编语言实现字符串的输入输出程序设计方法;6.掌握数制转换程序实现方法。
二、软硬件环境1、硬件环境:计算机系统windows;2、软件环境:装有MASM、DEBUG、LINK、等应用程序。
三、实验涉及的主要知识A)子程序知识要点:1、掌握子程序的定义语句;过程名PROC [near/far] 过程体RET过程名ENDP2.子程序结构形式一个完整的子程序一般应包含下列内容:1. )子程序的说明部分在设计了程序时,要建立子程序的文档说明,使用户能清楚此子程序的功能和调用方法.说明时,应含如下内容:.子程序名:命名时要名中见意..子程序的功能:说明子程序完成的任务;.子程序入口参数:说明子程序运行所需参数及存放位置;.子程序出口参数:说明子程序运行结果的参数及存放位置;.子程序所占用的寄存器和工作单元;.子程序调用示例;2、)掌握子程序的调用与返回在汇编语言中,子程序的调用用CALL,返回用RET指令来完成。
.段内调用与返回:调用子程序指令与子程序同在一个段内。
因此只修改IP;.段间调用与返回:调用子程序与子程序分别在不同的段,因此在返回时,需同时修改CS:IP。
3.)子程序的现场保护与恢复保护现场:在子程序设计时,CPU内部寄存器内容的保护和恢复。
一般利用堆栈实现现场保护和恢复的格式:过程名PROC[NEAR/FAR]PUSH AXPUSH BX..PUSH DX...POP DX...POP AXRET过程名ENDP4.子程序的参数传递方法1.寄存器传递参数这种方式是最基本的参数传递方式。
2.存储器单元传(变量)递参数这种方法是在主程序调用子程序前,将入口参数存放到约定的存储单元中;子程序运行时到约定存储位置读取参数;子程序执行结束后将结果也放在约定存储单元中。
实验5---语法分析器(自下而上):LR(1)分析法一、实验目的构造LR(1)分析程序,利用它进行语法分析,判断给出的符号串是否为该文法识别的句子,了解LR(K)分析方法是严格的从左向右扫描,和自底向上的语法分析方法。
二、实验内容程序输入/输出示例(以下仅供参考):对下列文法,用LR(1)分析法对任意输入的符号串进行分析:(1)E->E+T(2)E->E—T(3)T->T*F(4)T->T/F(5)F-> (E)(6)F->i输出的格式如下:(1)LR(1)分析程序,编制人:姓名,学号,班级(2)输入一个以#结束的符号串(包括+—*/()i#):在此位置输入符号串(3)输出过程如下:3.对学有余力的同学,测试用的表达式事先放在文本文件中,一行存放一个表达式,同时以分号分割。
同时将预期的输出结果写在另一个文本文件中,以便和输出进行对照。
三、实验方法1.实验采用C++程序语言进行设计,文法写入程序中,用户可以自定义输入语句;2.实验开发工具为DEV C++。
四、实验步骤1.定义LR(1)分析法实验设计思想及算法①若ACTION[sm , ai] = s则将s移进状态栈,并把输入符号加入符号栈,则三元式变成为:(s0s1…sm s , #X1X2…Xm ai , ai+1…an#);②若ACTION[sm , ai] = rj则将第j个产生式A->β进行归约。
此时三元式变为(s0s1…sm-r s , #X1X2…Xm-rA , aiai+1…an#);③若ACTION[sm , ai]为“接收”,则三元式不再变化,变化过程终止,宣布分析成功;④若ACTION[sm , ai]为“报错”,则三元式的变化过程终止,报告错误。
2.定义语法构造的代码,与主代码分离,写为头文件LR.h。
3.编写主程序利用上文描述算法实现本实验要求。
五、实验结果1. 实验文法为程序既定的文法,写在头文件LR.h中,运行程序,用户可以自由输入测试语句。
实验五数组的使用一实验目的要求1 掌握数组的概念和使用方法。
2 掌握数组初始化的方法。
3学会字符数组和字符串的应用。
4 学会用数组名作函数的参数。
二有关概念1 只有静态数组和外部数组才能初始化。
2 引用数组时,对下标是否越界不作检查。
如定义int a[5];在引用时出现a[5],不给出错信息,而是引a[4]下面一个单元的值。
3 字符串放在字符数组中,一个字符串以‘/o’结束,有一些字符串函数如strcpy,strcmp,strlen等可以方便一进行字符串运算。
4 如有如下定义:char *str=“I love china”;表示 str是一个字符型指针变量,它的值是一个字符数据的地址。
不要认为str是字符串变量,在其中存放一个字串“I love china”。
5 用数组名作函数实参时,传到形参的是数组的首地址。
三实验内容和步骤1 定义三个数组int a[5];int b[2][2];char c[10];(1)分别在函数体外和函数体内对它们进行初始化,然后输出它们的值。
(2)在程序中再加一语句,输出a[5],b[2][2] ,分析结果。
(3)对C数组改为用赋值语句给各元素赋初值:c[0] ~ c[9]各元素分别为:…I‟, …‟, …a‟, …m‟, …‟, …b‟, …o‟, …y‟。
然后用printf(“%s”,c)输出字符串,分析结果。
参考程序如下:(1)main(){ int i,x,y;static int a[5]={1,2,3,4,5};static int b[3][2]={{3,4},{6,7},{9,5}}static char c[10]={ …i‟, …l‟, …p‟, …q‟, …k‟, …s‟, …d‟, …e‟, …a‟};for(i=0;i<5;i++)printf( “%5d”,a[i]);for(x=0;x<3;x++)for(y=0;y<2;y++)printf(“%5d”,b[x][y]);for(i=0;i<10;i++)printf(“%3c”,c[i]);}(2)结果无此值,在上面程序中要输出a数组第5个元素,和b数组的第3行第2例元素,应加此程序行:Printf(“%d”,a[4]);Printf(“%d”,b[2][1]);2 有一数组,内放10个整数,要求找出最小的数和它的下标。
17.5实验5循环结构程序设计1.实验目的(1)熟悉掌握用while语句、do…while语句和for语句实现循环的方法。
(2)掌握在程序设计中循环的方法实现一些常用的算法(如穷举、迭代、递推等)。
(3)进一步学习调试程序。
2.实验内容编程并上机调试运行(1)输入一行字符、分别统计出其中的英文字母、空格、数字和其他字符的个数(本题是教材第5章第4题)在得到正确结果后,请修改程序使之能分别统计大小写字母、空格、数字和其他字符的个数。
(2)输出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其个位数字立方和等于该数本身。
例如,153是一个水仙花数,因为153=1³+5³+3³(本题是教材第五章第8题)。
(3)猴子吃桃问题。
猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。
第二天早上又将剩下的桃子吃掉一半,又多吃了一个,以后每天早上都吃了前一天剩下的一半零一个。
到第10天早上想再吃,只剩一个桃子了。
求第一天共摘了多少桃子(本题是教材第五章第12题)。
再得到正确结果后,修改题目,改为猴子每天吃了前一天剩下的一半后,再吃两个。
请修改程序并运行,检查结果是否正确。
(4)用牛顿迭代法求方程2X³=4x²+3x-6=0在1.5附近的根(本题是教材第五章第13题,学过高等数学的读者可选做此题)。
再得到正确结果后,请修改程序所设的X初始值由1.5改为100,1000,1000,再运行,观察结果,分析不同的x初值对结果有什么影响,为什么?修改程序,使之能输出迭代的次数和每次迭代的结果,分析不同的x初始值对迭代的次数有无影响。
3.预习内容预习教材第5章。
17.6实验6数组1.实验目的(1)掌握一维数组和二维数组的定义、赋值和输入输出的方法。
(2)掌握字符数组和字符串函数的使用。
(3)掌握与数组有关的算法(特别是排序算法)。
2.实验内容编程序并上机调试运行。
五shell变量与字符串操作特点:1 shell变量没有数据类型的区分 2 Shell 把任何存储在变量中的值,皆视为以字符组成的“字符串”。
3 设定的变量值只在当前shell环境中有作⽤ 4 不能以数字开头 5 =号两边不能存在空格 6 若变量值中存在空格,必须⽤括号将变量值括起来 I = “Jack Black”在编写shell时,如果变量未赋值,后续使⽤时不会出现任何错误。
如果要显⽰错误提⽰,则需要命令 shopt -s -o nounsetshopt -s -o nounset解析如下.范例如下[root@localhost ~]# vim test1.sh#!/bin/bashecho $Infomix[root@localhost ~]# sh test1.sh# 未提⽰任何错误[root@localhost ~]# vim test1.sh[root@localhost ~]# vim test1.sh#!/bin/bashshopt -s -o nounset #添加错误提⽰echo $Infomix[root@localhost ~]# sh test1.shtest1.sh:⾏4: Infomix: 为绑定变量 #提⽰错误⼆取得变量值$变量名称=${变量名称}如果变量作为字符的⼀部分输出时,则必须⽤${}将变量括起来,否则shell将⽆法识别变量。
$会将后⾯的所有字符当做变量的⼀部分,肯定是找不到变量的[root@localhost ~]# myname='lsq'[root@localhost ~]# echo $mynamelsq[root@localhost ~]# echo ${myname}lsq[root@localhost ~]# echo hello${myname}boyhellolsqboy[root@localhost ~]# echo hello$mynameboyhello如果后⾯接的不是字符,也不是_下划线,则不需要{}来括起来。
实验五LL(1) 分析法一、实验目的:一、实验目的:根据某一文法编制调试LL (1)分析程序,以便对任意输入的符号串进行)分析程序,以便对任意输入的符号串进行析。
本次实验的目主要是加深对预测分析。
本次实验的目主要是加深对预测分LL (1)分析法的理解。
)分析法的理解。
(所需学时:4学时)二、实验二、实验原理1、LL (1)分析法的功能)分析法的功能LL (1)分析法的功能是利用)分析法的功能是利用)分析法的功能是利用LL (1)控制程序根据显示栈顶内容、向前)控制程序根据显示栈顶内容、向前)控制程序根据显示栈顶内容、向前)控制程序根据显示栈顶内容、向前看符号以及LL (1)分析表,对输入符号串自上而下的过程。
)分析表,对输入符号串自上而下的过程。
2、LL (1)分析法的前提)分析法的前提改造文法:消除二义性、左递归提取因子,判断是否为改造文法:消除二义性、左递归提取因子,判断是否为改造文法:消除二义性、左递归提取因子,判断是否为改造文法:消除二义性、左递归提取因子,判断是否为改造文法:消除二义性、左递归提取因子,判断是否为LL (1)文法,3、LL (1)分析法实验设计思想及算)分析法实验设计思想及算X∈VN‘#’‘ S’ 进栈,当前输入符送进栈,当前输入符送进栈,当前输入符送进栈,当前输入符送a栈顶符号放入栈顶符号放入X若产生式为若产生式为X X1X2…X n按逆序即Xn…X 2X1入栈出错X=’ X=’ X=’ #’X∈VTX=aX=aM[X,a] M[X,a]M[X,a] M[X,a]是产生式吗是产生式吗出错X=a读入下一个符号读入下一个符号结束是是是是否否否否否是三、实验要求对文法G(E) 如下,用LL(1)分析法对任意输入的符号串进行分析:E→E+T│TT→T*F│FF→(E)│i消除文法左递归,改写为:E →TE'E' →+TE' | εT →FT'T' →*FT' | εF →( E ) | i(1)计算每个语法单位的first 和follow 集合;(2)构造预测分析表;(3)写出分析程序。