《字符数组CharacterArray.ppt》由会员分享,可在线阅读,更多相关《字符数组CharacterArray.ppt(73页珍藏版)》请在三一办公上搜索。
1、,字符数组Character Array,一、创建字符数组二、字符数组在绘图中的简单应用三、字符数组的基本操作四、字符串元胞数组五、常用字符串函数,字符串在数据的可视化、应用程序的交互等方面有重要的作用。MATLAB中,字符串(string)是作为字符数组来引入的。字符串按行向量进行存储,每一字符以其在字符集中的内部编码的形式存放。,1、用单引号对 创建字符串(一维字符数组),s1=%生成一个空字符串s2=Ms3=MathWorkss4=Accelerating the pace of engineering and sciences5=Youre right!s6=矩阵实验室,必须将待建字符
2、串放在单引号对中;每个字符占一个元素位,两个字节;当字符串中本身包含单引号时,每个单引号符用连续的两个单引号表示;,注意:必须在英文状态下输入“单引号对”。,一、创建字符数组,2、函数char():使用内部编码创建字符串,s=char(x)用字符的内部编码 x 创建相应的字符数组s,x为非负整数数组,实际的字符显示和给定的字符编码有关。x的范围为从0到65535,任何在此范围外的数据都没有定义。,字符编码的前128个编码即为ASCII码,s1=char()%生成空字符串s2=char(97)s3=char(97:122)s4=char(97:122;65:90),x=19968:19968+9
3、9X=reshape(x,10,10)X=Xs=char(X),附:ASCII码表(7位),高三位 b6b5b4,低四位b3b2b1b0,字符0的编码:48字符A的编码:65字符a的编码:97,获取字符数组的内部编码,x=double(s)或 x=abs(s)把字符数组s转换为对应的内部编码数值数组x。可以对内部编码数值数组x进行数值数组的各种运算。但其结果就变成一般数值向量的运算,而不再是字符串的运算,可使用char()函数把运算结果转化为对应字符串。,t=matlabx=double(s1)-32s=char(x),miwen=Rfyqfg%2%Ymj%Qfslzflj%Tk%Yjhmsn
4、hfq%Htruzynsl,恺撒密码,凯撒密码作为一种最为古老的对称加密体制,在古罗马的时候都已经很流行,它的基本思想是:通过把字母移动一定的位数来实现加密和解密。例如,如果密匙是把明文字母的位数向后移动三位,那么明文字母B就变成了密文的E,依次类推,X将变成A,Y变成B,Z变成C,由此可见,位数就是凯撒密码加密和解密的密钥。这个加密方法是以恺撒的名字命名的,当年恺撒曾用此方法与其将军们进行联系。,练习:上面的密文是将明文的每个字符(包括字母、空格、符号)按acsii码表后移5位得到的,请破译这段密文。,3、用,创建字符串(一维字符数组),利用方括号,可将多个字符串变量用逗号“,”连接,构成一
5、个长的单行字符串。,t1=;t2=MATLAB-;t3=The Language Of Technical Computing;t4=科学计算语言;s1=t1,t2,t3s2=t2,t3s3=t1,t2,t4s4=t2,t1,t4,4、用;创建多行(二维)字符数组,t1=Hello,;t2=Nice to meet you!;s=t1;t2,?Error using=vertcatCAT arguments dimensions are not consistent.,利用方括号,可将多个字符串变量用分号“;”连接,构成一个多行字符串(二维字符数组),但是必须保证各行等长(每行的字符数目相等)
6、。空字符串会被忽略掉。,解决办法:必须保证各行等长,可在较短字符串的末尾增加适当数量的“空格”。,错误原因:t1 6个字符t2 17个字符,t1=Hello,;t2=blanks(11);t3=;t4=Nice to meet you!;s1=t1,t2;t4s2=t1,t2;t3;t4,5、函数blanks(n):创建包含 n 个空格的字符串s,s1=Hello,Nice to meet you!,s2=Hello,Nice to meet you!,s1=Hello,Nice to meet you!,s2=Hello,Nice to meet you!,(1)S=strvcat(t1,t
7、2,t3,.)把t1,t2,t3,.作为行,空字符串会被忽略掉,生成二维字符数组S,不必考虑每行的字符数是否相等,S的行数等于t1,t2,.的行数之和,S的列数等于最长的字符串的字符数目,较短字符串的末尾用空格补齐。每个字符参数 ti,本身是字符数组。,t1=Hello,;t2=;t3=Nice to meet you!;s1=strvcat(t1,t3)s2=strvcat(t1,t2,t3),6、创建字符数组的一些常用函数,(2)t=strcat(s1,s2,s3,.)将字符数组s1,s2,s3的对应行级联(在水平方向上)。所有输入数组必须具有相同的行数。输入字符数组中尾部的空格被忽略,不
8、出现在输出中。,a=hello b=goodbyec=strcat(a,b),c=hellogoodbye,s1=strvcat(MathWorks-,Matlab-)s2=Accelerating the pace of engineering and sciences3=The Language Of Technical Computings4=strvcat(s2,s3)s5=strcat(s1,s4),t1=Hello,;t2=;t3=Nice to meet you!;s1=char(t1,t3)s2=char(t1,t2,t3),s1=Hello,Nice to meet you!
9、,s2=Hello,Nice to meet you!,(3)S=char(t1,t2,t3,.)把t1,t2,t3,.作为行,空字符串不会被忽略,生成二维字符数组S,不必考虑每行的字符数是否相等,S的行数等于t1,t2,.的行数之和,S的列数等于最长的字符串的字符数目,较短字符串的末尾用空格补齐。每个字符参数 ti,本身是字符数组。,t1=Hello,;t2=;t3=Nice to meet you!;s1=str2mat(t1,t3)s2=str2mat(t1,t2,t3),s1=Hello,Nice to meet you!,s2=Hello,Nice to meet you!,(4)S
10、=str2mat(t1,t2,t3,.)把t1,t2,t3,.作为行,空字符串不会被忽略,生成二维字符数组S,不必考虑每行的字符数是否相等,S的行数等于t1,t2,.的行数之和,S的列数等于最长的字符串的字符数目,较短字符串的末尾用空格补齐。每个字符参数 ti,本身是字符数组。,str2mat(t1,t2,.)的功能与char(t1,t2,.)一样,matlab在帮助中说明:This routine will become obsolete(已不用的;已废弃的;过时的)in a future version.Use char instead,1、plot(x,y,LineSpec),用字符数组
11、 LineSpec 指定线型,点标记和画线的颜色,LineSpec的三种属性可以全部指定,也可以只指定其中某一个或两个,排列顺序任意。,二、字符数组在绘图中的简单应用,x=0:0.2:2*piy=sin(x)plot(x,y,r-o),x=0:0.2:2*piy=sin(x)plot(x,y,ro),指定不指定线型的话,plot()只绘制点标记,2、plot(x,y,LineSpec,PropertyName,PropertyValue)对plot生成的图形对象,用指定的properties进行设置。用字符数组PropertyName指定具体的属性,Color 非标准颜色可用r,g,b指定,r
12、,g,b取0和1之间的数值LineWidth线宽LineStyle线型Marker点标记MarkerEdgeColor marker的颜色(或 filled markers 边的颜色)MarkerFaceColorthe face of filled markers 的颜色MarkerSize点标记的大小,PropertyName,filled markers circle,square,diamond,pentagram,hexagram,and the four triangles),x=-pi:pi/10:pi;y=tan(sin(x)-sin(tan(x);plot(x,y,-rs,L
13、ineWidth,2,.MarkerEdgeColor,k,.MarkerFaceColor,g,.MarkerSize,10),3、title(text)添加图形标题,例:,xlabel(text)添加 X 坐标轴标注ylabel(text)添加 Y 坐标轴标注zlabel(text)添加 Z 坐标轴标注,例:,4、xlabel()/ylabel()/zlabel(),5、legend(string1,string2,.)在图形中添加图例,x=0:0.05:7y1=log10(x)y2=sin(x)plot(x,y1,b,x,y2,r)axis(0,7,-2,2)legend(Log(x),
14、Sin(x),6、text()在图形中指定位置添加文本,text(x,y,string)在点(x,y)处添加文本text(x,y,string,PropertyName,PropertyValue.),x=0:0.05:7y=log10(x)plot(x,y)s=leftarrow Log(x)text(2,0.2,s,fontsize,20),7、使用TeX/LaTeX在图形中添加希腊字母、数学符号及公式,在Matlab的text对象的函数中(函数 title、xlabel、ylabel、zlabel、text、legend),说明文字除使用标准的ASCII字符外,还可使用 TeX/LaTe
15、X 格式的控制字符,这样就可以在图形中添加希腊字母、数学符号及公式等内容。Matlab支持两个层次的 TeX,通过 text的Interpreter属性来设置:tex 默认设置,支持 TeX 的一个子集latex 支持 LaTeXnone 不支持,TeX是D.E.Knuth 开发的免费的功能强大的排版系统,是公认的数学公式排得最好的系统。LaTeX是由L.Lamport编写的一个目前最流行的TeX宏包(宏集、扩展),特别适合数学类论文、书籍的排版,也可以排版普通的文章和书籍。,(1)TeX Character Sequence,bf:设置字体为粗体字。it:设置字体为斜体字。sl:设置字体为斜
16、体字,很少使用。rm:设置字体为正常字体。fontname字体名:设置字体名。例如:fontname宋体fontsize字体大小:设置字体大小。例如:fontsize16_下标 表示下标,若下标只有一个字符,可省略 上标 表示上标,若上标只有一个字符,可省略,(2)Tex字符的字体设置,例:使用TeX输入数学表达式,title(itAe-alphaittsinbetaitt alphabeta)xlabel(Time musec.)ylabel(Amplitude),color颜色名颜色名颜色名有12种,分别为red、green、yellow、magenta、blue、black、white、
17、cyan、gray、barkGreen、orange和lightBlue。例如:colormagentamagentacolorrgba b c设置字体颜色为RGB矩阵a b c所表示的颜色。a、b和c都在0 1范围内。例如:colorrgb0.5.5,(3)Tex字符的颜色设置,str=黑colorred红colorgreen绿colorrgb0 0 1蓝黑text(0.1,0.5,str,fontsize,24,fontname,黑体),例:使用TeX指定字符颜色,(LaTeX命令)$LaTeX命令$LaTeX命令$,在matlab中,使用Latex命令可用下面的方法:,s1=$y_1=e
18、xsin(x)$s2=$y_2=frac12sqrt3x$str=char(s1,s2)text(0.2,0.5,str,Interpreter,latex,FontSize,16),(4)使用Latex,legend()函数必须先获得句柄,才可以设置Interpreter属性h=legend(str1,str2,)set(h,interprete,latex),上标用 上标,下标用 _下标,希腊字母与TeX一样,用 alpha 等表示分式$frac分子分母$根式$sqrtx$、$sqrtnx$求和$sum_i=1n x_i$积分$int_01$偏微分$frac partialy partia
19、lx$极限$lim_n rightarrow infty$%n趋于无穷符号在lim正下方$lim_n rightarrow infty$%n趋于无穷符号在lim右下角上划线$overlinex$下划线$underlinex$%下划线在x的正下方卧式花括号命令$overbracex+y+z+w$仰式花括号命令$a+underbraceb+c+d$,(5)常用 LaTeX 命令,更多的 LaTeX 命令请参考相关的 LaTeX 资料,1、字符数组中元素及子数组的访问与赋值,与数值数组一样,可用双下标,也可用单下标访问字符数组中的元素和子数组。,s=strvcat(MathWorks,Matlab)
20、ch1=s(2,5)ch2=s(11)s1=s(:,end:-1:1)s(16)=xs(2,9)=ys(:,1)=s(:,end)=zd=s(:),练习:试写出这些matlab语句的输出结果,并在matlab中进行验证。,三、字符数组的基本操作,2、字符数组的关系运算,可以使用关系运算符进行字符数组的比较,但是要求比较的两个数组维数相同,或者其中一个是标量。,A=fate;B=cake;A=Bans=0 1 0 1 A Bans=1 0 1 0,3、一些通用函数,size()获得字符数组的大小(行数、列数)length()获得字符数组的长度(行数、列数中的较大值)numel()获得字符数组的字
21、符总数(总数=行数列数)disp()在command windows中显示字符数组的内容sort()按照字符的内部编码值对字符串排序,s=strvcat(MathWorks,Matlab);len=length(s)r,c=size(s)n=numel(s)disp(s)s1=sort(s)s2=sort(s,2)s2=sort(s,descend)s2=sort(s,2,descend),练习:试写出这些matlab语句的输出结果,并在matlab中进行验证。,S.或 S 对字符数组S进行转置操作reshape(S,m,n)总元素数目不变,改变字符数组的行、列repmat(S,m,n)按指定
22、行、列平铺字符数组rot90(S,k)逆时针旋转字符数组fliplr(S)左右翻转字符数组flipud(S)上下翻转字符数组,s=char(65:89)s1=reshape(s,5,5)s2=s1.s3=rot90(s2)s4=fliplr(s3)s5=flipud(s4)s6=repmat(s5,2,2),练习:试写出这些matlab语句的输出结果,并在matlab中进行验证。,diag(S,k)提取二维字符数组S的第k条对角线元素diag(t,k)构成二维字符数组,其第k条对角线的元素由一维字符数组 t 中的元素构成,其余位置元素为字符char(0)tril(S)、triu(S)提取字符数
23、组的下(上)三角元素,其余位置元素以字符char(0)替换,x=reshape(65:89,5,5)s=char(x)s1=tril(s)s2=triu(s)s3=diag(s,1)s4=diag(s3),练习:试写出这些matlab语句的输出结果,并在matlab中进行验证。,四、字符串元胞数组Cell Arrays of Strings,字符串元胞数组叫字符数组而言,其优点是不要求每个字符串的长度相同,给用户的数据输入和整合提供了方便。,1、使用 创建字符串元胞数组,cs1=China,City,ShangHaics1=China City ShangHai,cs2=China;City;
24、ShangHaics2=China City ShangHai,2、cellstr():将普通字符数组转为字符串元胞数组,data=Allison Jones;Development;Phoenix;celldata=cellstr(data)celldata=Allison Jones Development Phoenix,cellstr()会删除字符串尾部的空格,char():可将字符串元胞数组转为普通字符数组,str=char(celldata)str=Allison JonesDevelopment Phoenix,char()会在字符串尾部添加空格,使得每个字符串长度相同,3、is
25、cellstr():判断一个数组是否为字符串元胞数组,tf=iscellstr(A),A=ab,cd;B=ab,cd;iscellstr(A)ans=0 iscellstr(B)ans=1,五、常用字符串函数,1、字符串检测函数2、简单的字符串处理函数3、字符串比较函数4、字符串替换和查找函数5、字符串执行函数eval()6、字符串和数值之间的转换函数7、不同数制之间的转换函数8、格式化输入输出,1、字符串检测函数,t1=1234abcdeft2=Mat 矩阵t3=Matlabs=char(t1,t2,t3)L1=ischar(s)L2=isletter(s)L3=isspace(s),deb
26、lank(s)删除字符串尾部的空格strtrim(s)删除字符串的开头和尾部的空格,制表,回车符lower(s)将字符串中的字母转换成小写upper(s)将字符串中的字母转换成大写,b=blanks(10)t=Matlab 2008as=b,t,b,t,bL=length(s)s1=deblank(s)L1=length(s1)s2=strtrim(s1)L2=length(s2)s3=lower(s2)s4=upper(s3),练习:试写出这些matlab语句的输出结果,并在matlab中进行验证。,2、简单的字符串处理函数,strjust()调整字符串排列位置T=strjust(S)左对齐
27、T=strjust(S,right)右对齐T=strjust(S,left)左对齐T=strjust(S,center)居中,S=blanks(10),a b c d e,blanks(30)T1=strjust(S)T2=strjust(S,right)T3=strjust(S,left)T4=strjust(S,center),若字符串前部或尾部没有空格,则左对齐、右对齐、居中的效果完全相同。,TF=strcmp(str1,str2)比较字符串str1和str2是否完全相等,是,返回逻辑1(真),否,返回逻辑0(假)TF=strcmpi(str1,str2)比较字符串str1和str2是否
28、完全相等,忽略字母大小写TF=strncmp(str1,str2,n)比较字符串str1和str2前n列字符是否相等,TF=strncmpi(str1,str2,n)比较字符串str1和str2前n个字符是否相等,忽略字母大小写,3、字符串比较函数,strcmp(Yes,No)ans=0,(1)比较两个字符串,(2)比较一个字符串和一个字符串元胞数组,a=upon;b=Once upon;a time;strcmp(a,b)ans=0 1 0 0,(3)比较两个字符串元胞数组,c=Time flies when;youre having fun.;d=Time drags when;youre
29、 anxiously waiting.;strcmp(c,d)ans=1 0 1 1 0 0,str=strrep(str1,str2,str3)进行字符串替换,区分大小写。把str1中所有的子字符串str2用str3来替换,4、字符串替换和查找函数,s1=This is a good example.;str=strrep(s1,good,great),str=This is a great example.,strrep()字符串替换strfind()查找字符串findstr()查找字符串 strmatch()寻找符合条件的行 strtok()在字符串里找出指定标记之前的子字符串,这些函数
30、均可用于字符串元胞数组,具体用法请参考matlab帮助文件。,k=strfind(str,pattern)在长字符串 str 中查找是否包含有短字符串 pattern。若包含,返回数组k,其元素为pattern出现在str中的位置若不包含,则返回空数组。,s1=Find the starting indices of the pattern string;s2=in;k1=strfind(s1,s2)k2=strfind(s2,s1)k3=findstr(s1,s2)k4=findstr(s2,s1),k1=2 15 19 45,k=findstr(str1,str2)查找str1和str2中
31、,较短字符串在较长字符串中出现的位置,没有出现返回空数组。结果与str1、str2的顺序无关。,k2=?k3=?k4=?,x=strmatch(str,STRS)检查字符数组STRS的每一行,若该行是以字符串str开始的,就把该行的行号输出至列数组x中。x=strmatch(str,STRS,exact)检查字符数组STRS的每一行,若该行与str完全相同,就把该行的行号输出至列数组x中。,t1=maxt2=minimaxt3=maximumt4=max imumt5=max就是最大的意思S=char(t1,t2,t3,t4,t5)x1=strmatch(t1,S)x2=strmatch(t1
32、,S,exact),token=strtok(str,delimiter)token,remain=strtok(str,.)str:字符串 delimiter:指定的分隔符,未指定delimiter的话,默认为空格char(32),水平制表符char(9)和回车char(13)。,s=aaabcd,char(32),matlab,char(32),矩阵实验室t1,r1=strtok(s)t2,r2=strtok(s,a)t3,r3=strtok(s,b)t4,r4=strtok(s,w),练习:试写出这些matlab语句的输出结果,并在matlab中进行验证。,从str的第一个元素开始,第一
33、个非分隔字符与其之后的第一个分隔符之间的字符串返回至token,之后的部分返回至remain;若第一个非分隔字符之后没有分隔符,则从第一个非分隔字符直到str的最后一个字符都被返回至token,remain则为空串。,使用eval()命令“执行”某一字符串,就如同用户在MATLAB的Command窗口中输入此字符串并执行一样。,5、字符串执行函数eval(),eval(expression)在matlab中执行expression,clcclear alls1=a=2;s2=3*a;eval(s1)b=eval(s2)s3=c=,s2;eval(s3)whos,Name Size Bytes
34、Class a 1x1 8 double b 1x1 8 double c 1x1 8 double s1 1x5 10 char s2 1x3 6char s3 1x7 14char,a1,a2,a3,.=eval(myfun(b1,b2,b3,.)执行函数myfun,输入参数为b1,b2,.,输出参数为a1,a2,.,eval(a1,a2,a3,.=myfun(b1,b2,b3,.)也可以执行函数myfun,输入为b1,b2,.,输出为a1,a2,.,x=pis=y=sin(x)eval(s),x=pis=sin(x)y=eval(s),这种方式的语法检查不是很严格,可能会产生未曾捕获过的
35、错误或不可预期的行为。,不建议使用这种方式,6、字符串和数值之间的转换函数,str=int2str(N)将整数转换为整数格式的字符串。输入参数N可以是单一的整数、整数向量或整数矩阵。非整型值在转换前都会被四舍五入取整。,x=2,3,5.7,1/3,2/3s=int2str(x),s=2 3 6 0 1,clcclear allfor n=1:5 xn=n;end,clcclear allfor n=1:5 s=x,int2str(n),=n;eval(s);end,这些语句执行完后,matlab的工作区中共有几个变量?变量名是什么?变量的值是什么?若换成右边的语句情况如何?,clcclear
36、allx=eye(3);for r=1:3 for c=1:3 s=x(,int2str(r),int2str(c),)=,int2str(x(r,c);disp(s);endend,这些matlab语句在屏幕上输出的结果是什么?在matlab中验证你的想法是否正确。,str=num2str(A)对数组A中元素取四位精度,并转换为相对应的字符串str,末尾多余的0将省略,str=num2str(A,precision)对数组A中元素按照指定的精度precision取值,并转换为相对应的字符串str,末尾多余的0将省略。参数precision指定输出字符str的位数。,str=num2str(A
37、,format)按照指定的格式format来转化,具体的format可参考fprintf函数的帮助中的相关说明。,x=2,3,5.7,1/3,2/3s1=num2str(x)s2=num2str(x,4)s3=num2str(x,%11.4f),s1=2 3 5.7 0.33333 0.66667s2=2 3 5.7 0.3333 0.6667s3=2.0000 3.0000 5.7000 0.3333 0.6667,str=mat2str(A)将矩阵A转化为字符,包含括号,这样可以使用eval(str)命令产生原始矩阵(使用15位精度)。,str=mat2str(A,n)使用 n 位精度将矩
38、阵A转化为字符,t=magic(3)s=mat2str(t)A=eval(s),format longt=randn(3)s1=mat2str(t)s2=mat2str(t,4)t1=eval(s1)t2=eval(s2),s=8 1 6;3 5 7;4 9 2A=8 1 6 3 5 7 4 9 2,X=str2double(str)把字符串str转换为双精度数值若str2double()无法返回有效的双精度数值,则返回NaN。输入参数也可以是字符串元胞数组。,a=str2double(123.45e7)b=str2double(123+45i)c=str2double(3.14159)d=s
39、tr2double(2.7i-3.14)e=str2double(1,200.34)f=str2double(3.4a)g=str2double(2.71 3.1415),s1=12d1=double(s1)d2=str2double(s1)s2=1,2;3,4d3=str2double(s2),d1=?d2=?d3=?,字符串str内可以包含下列字符:字符0到9,逗号(千位分割符号),小数点,正负号,指数符号e(10的幂),虚数单位i,X=str2double(C)C为cell数组,用大括号 创建,其元素为字符串X为与C同维的数值数组,其元素为C数组中的每个字符串转换后的双精度数值,若str
40、2double()无法返回有效的双精度数值,则返回NaN。,C1=12,3.45;-5.6e-1,7+8iC2=b12,3 4;5.6,7X1=str2double(C1)X2=str2double(C2),X1=12.0000 3.4500-0.5600 7.0000+8.0000i,X2=NaN NaN 5.6000 7.0000,X=str2num(str)把字符串str转换为双精度数值(组),若str2num()无法返回有效的数值,则返回空数组。输入参数不可以是字符串元胞数组,但是可以使二维字符数组,s1=1 2;3 4s2=1 2m;3 4id1=str2num(s1)d2=str2
41、num(s2),d1=?d2=?,字符串str内可以包含如下字符:*Digits(数字)*A decimal point(小数点)*A leading+or sign(正号、负号)*A letter e or d preceding a power of 10 scale factor(字母e或d,表示10的幂)*A letter i or j indicating a complex or imaginary number(字母i或j,表示虚数单位),例:作出函数y=e-2tsin(3t)的图形,并标注最大值点,%清除内存变量%时间 t 从 0 到 10 每隔 0.01 均匀采样%对应每一个
42、 t 求 y 值%求最大值 y_max 及其下标 i_max%生成最大值点的横坐标字符串%生成最大值点的纵坐标字符串%三行字符来标识最大值点%图名称字符串%新建一个图形窗%画一条黑色的水平线%保持图形不被清除%蓝色实线画曲线 y(t)%大小为 20 的红色圆点标记最大值点%在最大值点附近显示注释字符%显示图名%显示横坐标名%显示纵坐标名%取消图形保持,cleart=0:0.01:10;y=exp(-2*t).*sin(3*t);y_max,i_max=max(y);t_text=t=,num2str(t(i_max);y_text=y=,num2str(y_max);max_text=char
43、(Maxium,t_text,y_text);Title=y=exp(-2*t).*sin(3*t);Figureplot(t,zeros(size(t),k)hold onplot(t,y,b)plot(t(i_max),y_max,r.,MarkerSize,20)text(t(i_max)+0.3,y_max+0.05,max_text)title(Title)xlabel(t)ylabel(y)hold off,7、不同数制之间的转换函数,数制,进位计数制,简称数制,是人们利用符号来计数的方法。二进制、十进制、八进制和十六进制是学习计算机知识应该掌握的数制。R进制的数,都有以下三个要点
44、:(1)基数为R,即使用R个数码。(2)进位规则为逢R进一(3)第i个数位上的数码所具有的位权为Ri。数值可用下面的通式表示:N=an-1Rn-1+an-2Rn-2+a1R1+a0R0+amR-m,b1=01010101;d1=123;d2=bin2dec(b1)b2=dec2bin(d1),d2=85b2=1111011,bin2dec()二进制字符串转换为十进制整数dec2bin()十进制非负整数转换为二进制字符串,h1=a1;d1=1000;d2=hex2dec(h1)h2=dec2hex(d1),d2=161h2=3E8,hex2dec()十六进制字符串转换为十进制整数 dec2hex
45、()十进制非负整数转换为十六进制字符串,d=base2dec(strn,base)把base进制字符串strn转换为十进制整数base 为2和36之间的整数,str=dec2base(d,base)str=dec2base(d,base,n)把非负十进制整数d转换为base进制字符串,d 252若指定n,且n比实际输出的字符数目大的话,则在输出的字符串前面补“0”字符,若n小于输出字符的数目,则n不起作用。,s=111;d2=base2dec(s,2)d3=base2dec(s,3),d2=7d3=13,d=39;s=dec2base(d,2)s=dec2base(d,2,8),s=10011
46、1s=00100111,s1=z1;d1=12345d2=base2dec(s1,36)s2=dec2base(d1,36),d2=?s2=?,为何base 为2和36之间的整数?,d=0.25;h=num2hex(d)dd=hex2num(h),hex2num()十六进制字符串转换为IEEE双精度数num2hex()单、双精度数转换为16进制字符串,h=3fd0000000000000dd=0.250000000000000,格式化字符,8、格式化输入输出函数,(1)sscanf(2)fprintf(3)Input,(1)格式化输入函数,sscanf:读取格式化字符串A=sscanf(s,f
47、ormat),S1=2.7183 3.1416;S2=2.7183e3 3.1416e3;S3=0 2 4 8 16 32 64 128;A=sscanf(S1,%f)A=2.7183 3.1416 B=sscanf(S2,%e)B=1.0e+003*2.7183 3.1416,C=sscanf(S3,%d)C=0 2 4 8 16 32 64 128,S1=0 2 4 8 16 32 64 128;A=sscanf(S3,%d)A=0 2 4 8 16 32 64 128,B=sscanf(S3,%d,1)B=0 C=sscanf(S3,%d,3)C=0 2 4,A=sscanf(s,for
48、mat,size),(2)格式化输出函数,sprintf:格式化输出数据到命令行窗口S=sprintf(format,A,),A=1/eps;B=-eps;S1=sprintf(%+15.5f,A)S1=+4503599627370496.00000 S2=sprintf(%+.5e,B)S2=-2.22045e-016,格式化字符串中若包含了“+”,则表示在输出的字符串中包含数据的符号,C=65,66,67,pi;D=pi,65,66,67;S3=sprintf(%s%f,C)S3=ABC3.141593 S4=sprintf(%s%f%s,D)S4=3.141593e+00065.0000
49、00BC,对于整数数值进行格式化输出时,可以直接将向量转变成为字符串,如果输出的数据与相应的格式化字符串不匹配时,则输出数值最常见的一种形式,(3)input函数,MATLAB提供了input函数来完成获取用户输入数据的功能,以满足能够和用户的输入进行交互的需要。A=input(prompt)A=input(prompt,s)第一个参数prompt为提示用的字符串第二个参数s若有s,则输入的数据为字符串没有s,则输入的数据为双精度数据,例:A=input(随便输入数字:)随便输入数字:264 A=264 B=input(随便输入数字:,s)随便输入数字:264 B=264 whos Name Size Bytes Class A 1x1 8 double array B 1x3 6 char array Grand total is 4 elements using 14 bytes,